Delphi 1个弹出式菜单和2个备忘录&x27;s、 从哪个备忘录调用菜单

Delphi 1个弹出式菜单和2个备忘录&x27;s、 从哪个备忘录调用菜单,delphi,popupmenu,memo,Delphi,Popupmenu,Memo,我在表格上有两个备忘录和一个Tpopupmenu,我已将弹出菜单指定为两个备忘录的弹出菜单。弹出菜单有几个指定的菜单项,当我用鼠标右键单击其中一个备忘录并单击其onclick事件上的一个菜单项时,我希望能够知道哪个备忘录是调用菜单的备忘录,但无法确定如何找出它是哪个备忘录 谁能给我一个关于如何检测潜在备忘录的指示 谢谢 colin您可以使用弹出菜单的属性: procedure TForm1.PopupItemClick(Sender: TObject); begin if PopupMenu

我在表格上有两个备忘录和一个Tpopupmenu,我已将弹出菜单指定为两个备忘录的弹出菜单。弹出菜单有几个指定的菜单项,当我用鼠标右键单击其中一个备忘录并单击其onclick事件上的一个菜单项时,我希望能够知道哪个备忘录是调用菜单的备忘录,但无法确定如何找出它是哪个备忘录

谁能给我一个关于如何检测潜在备忘录的指示

谢谢

colin

您可以使用弹出菜单的属性:

procedure TForm1.PopupItemClick(Sender: TObject);
begin
  if PopupMenu1.PopupComponent = Memo1 then
    ..
  else
    ..
您可以使用弹出菜单的属性:

procedure TForm1.PopupItemClick(Sender: TObject);
begin
  if PopupMenu1.PopupComponent = Memo1 then
    ..
  else
    ..

或者将
PopupComponent
值强制转换为
TMemo
指针,并根据需要使用它。@RemyLebeau:是的,当前面加上
is TMemo
检查时,我更喜欢强制转换(+分配给本地变量)而不是if语句。除非每个备忘录的处理方式不同,但在这种情况下,两个菜单项可能会出现冲突。谢谢,我确实认为它是PopupComponent,但我使用的是PopupComponent项,它当然是给我弹出菜单。@Marjannema:如果你事先确定
tpopummenu
只分配给
TMemo
组件,那么
is
检查就不需要了。@RemyLebeau:是的,但是事情变了。。。然后有人来了,不知道这个限制,并将处理程序用于另一个控件。。。然后爆炸,或者更糟的是,不是爆炸,而是一种更微妙的影响,不会立即被注意到。。。然后是几个。。。稍后,一个bug被报告,有人需要花费数小时试图找出它的来源。。。当您将typeX变量视为typeY时,我更喜欢在
is
check:-)上几乎立即运行的安全网,或者将
PopupComponent
值强制转换为
TMemo
指针,并根据需要使用它。@RemyLebeau:是的,当前面有
is TMemo
check时,我更喜欢强制转换(+分配给本地变量)在if语句上。除非每个备忘录的处理方式应该不同,但在这种情况下,两个菜单项可能会出现冲突。谢谢,我确实认为是PopupComponent,但我使用的是items PopupComponent,当然是给我弹出菜单。@MarjanVenema:如果你事先确定
TPopupMenu
只分配给
TMemo
组件,则不需要进行
is
检查。@RemyLebeau:是的,但情况会发生变化……然后有人不知道这个限制,并使用处理程序进行另一个控制……然后砰的一声,或者更糟的是,不是砰的一声,而是一个不会立即注意到的更微妙的效果……一个然后几天后,报告了一个bug,有人需要花费数小时试图找出它的来源……当您将typeX变量视为typeY时,我更喜欢在运行时几乎立即拍打
is
check:-)的安全网