contextmenustrip项目的事件处理程序

时间:2009-09-30 14:32:18

标签: c# winforms event-handling

我在C#代码中的treeView的各个节点上添加了右键单击功能。当用户右键单击树上的那些节点时,应弹出“添加”,“删除”,“重命名”等选项。现在,根据被点击的节点,我使用以下状态填充菜单:

contextMenuStrip1.Items.Add( “添加”);

然后,如果右键单击了不同的节点,我将使用以下内容:

contextMenuStrip1.Items.Add( “重命名”);

有些节点必须显示两个项目:contextMenuStrip1.Items.Add(“Add”); contextMenuStrip1.Items.Add( “删除”);

当上下文menustrip中存在两个事件处理程序时,如何为Add和Delete编写单独的事件处理程序。我无法区分是单击“添加”还是“删除”。目前我在ContextMenuStrip上使用“ItemClicked”事件来在“Add”的事件处理程序中执行我的代码片段,但是当单击“Delete”时也会引发此evemt。任何帮助将不胜感激。

谢谢,Viren

2 个答案:

答案 0 :(得分:2)

ToolStripItem.Add(string text)方法返回已添加的ToolStripItem。您应该以这种方式引用它们,当ItemClicked事件被触发时,您可以确定单击了哪一个。

E.x:

using System;
            using System.Windows.Forms;
            namespace WindowsFormsApplication6
            {
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        using (Form form = new Form())
        {
            form.ContextMenuStrip = new ContextMenuStrip();
            ToolStripItem addMenuItem = form.ContextMenuStrip.Items.Add("Add");
            ToolStripItem deleteMenuItem = form.ContextMenuStrip.Items.Add("Delete");

            form.ContextMenuStrip.ItemClicked += (sender, e) =>
          {
              if (e.ClickedItem == addMenuItem)
              {
                  MessageBox.Show("Add Menu Item Clicked.");
              }
              if (e.ClickedItem == deleteMenuItem)
              {
                  MessageBox.Show("Delete Menu Item Clicked.");
              }
          };
            Application.Run(form);
        }
    }
}

}

答案 1 :(得分:0)

您可以将sender Object强制转换为ContextMenuItem并检查它的name属性:

Private Sub ContextItem_Clicker(Byval sender As Object, Byval e As EventArgs)
    Dim castedItem As ContextMenuItem = TryCast(sender, ContextMenuItem)
    If castedItem IsNot Nothing Then
        If castedItem.Name = "whatever" Then
            ' Do something remotely useful here
        End If
    End If
End Sub

或者为不同的ContextItem添加不同的事件处理程序。