我在窗体里每单击一次Button1就动态生成一个菜单项,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  NewItem: TMenuItem;
begin
  NewItem := TMenuItem.Create(PopupMenu1);
  PopupMenu1.Items.Add(NewItem);
  NewItem.Caption := 'Menu Item ' + IntToStr(PopupMenu1.Items.Count-1);
  NewItem.Name := 'm' + inttostr(PopupMenu1.Items.Count-1);
  NewItem.Tag := PopupMenu1.Items.Count-1;
  NewItem.OnClick := myClick;
end;
但不知在我定义的myClick事件中如何判断是哪个菜单项被按下?
procedure TForm1.myClick(Sender: TObject);
begin 
end;
请各位高手指教。

解决方案 »

  1.   

    procedure TForm1.myClick(Sender: TObject);
    begin 
      if Uppercase(trim(TMenuItem(Sender).Caption)) = Uppercase('m1') then
        showmessage('这是第一个菜单项')
    end;
      

  2.   

    procedure TForm1.myClick(Sender: TObject);
    begin 
      if Uppercase(trim(TMenuItem(Sender).Caption)) = Uppercase('m1') then
        showmessage('这是第一个菜单项')
    end;
    是这个吧:
      if Uppercase(trim(TMenuItem(Sender).Name)) = Uppercase('m1') then
        showmessage('这是第一个菜单项')
      

  3.   

    sender as TMenuItem后你就可以取这个彩单的所有属性了
      

  4.   

    procedure TForm1.myClick(Sender: TObject);
    begin 
      (TMemuItem(Sender).Tag)?
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      NewItem: TMenuItem;
    begin
      NewItem := TMenuItem.Create(PopupMenu1);
      PopupMenu1.Items.Add(NewItem);
      NewItem.Caption := 'Menu Item ' + IntToStr(PopupMenu1.Items.Count-1);
      NewItem.Name := 'm' + inttostr(PopupMenu1.Items.Count-1);
      NewItem.Tag := PopupMenu1.Items.Count-1;
      NewItem.OnClick := myClick;
    end;----------------------------------------------------------
    事太多、心太乱
        
      

  5.   

    以上答复,都是错误的。
    因为提问者动态生成了多个菜单项,而“  if Uppercase(trim(TMenuItem(Sender).Caption)) = Uppercase('m1') then
        showmessage('这是第一个菜单项')
    end;
    是这个吧:
      if Uppercase(trim(TMenuItem(Sender).Name)) = Uppercase('m1') then
        showmessage('这是第一个菜单项')”
    中的Caption或Name属性事先都不确定。所以以上答案均是错误的!
    不过如果menuitem能有selected属性就好了。