我在C#代码中的treeView的各个节点上添加了右键单击功能。当用户右键单击树上的那些节点时,应弹出“添加”,“删除”,“重命名”等选项。现在,根据被点击的节点,我使用以下状态填充菜单:
contextMenuStrip1.Items.Add( “添加”);
然后,如果右键单击了不同的节点,我将使用以下内容:
contextMenuStrip1.Items.Add( “重命名”);
有些节点必须显示两个项目:contextMenuStrip1.Items.Add(“Add”); contextMenuStrip1.Items.Add( “删除”);
当上下文menustrip中存在两个事件处理程序时,如何为Add和Delete编写单独的事件处理程序。我无法区分是单击“添加”还是“删除”。目前我在ContextMenuStrip上使用“ItemClicked”事件来在“Add”的事件处理程序中执行我的代码片段,但是当单击“Delete”时也会引发此evemt。任何帮助将不胜感激。
谢谢,Viren
答案 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添加不同的事件处理程序。