上下文菜单项的事件处理程序
问题描述:
我在C#代码中的treeView的各个节点上添加了右键单击功能。当用户在树上的这些节点上点击右键时,弹出“添加”,“删除”,“重命名”等选项。现在,根据正在点击的节点,我使用以下状态元素填充菜单:上下文菜单项的事件处理程序
contextMenuStrip1.Items.Add(“Add”);
然后,如果一个不同的节点是正确的点击我使用下面的:
contextMenuStrip1.Items.Add(“重命名”);
有些节点需要显示两个项目:contextMenuStrip1.Items.Add(“Add”); contextMenuStrip1.Items.Add( “删除”);
如何为上下文菜单栏中存在的两者都添加和删除时编写单独的事件处理程序。我无法区分是否单击“添加”或“删除”。目前,我在ContextMenuStrip上使用“ItemClicked”事件在“添加”事件处理程序中执行我的一段代码,但单击“删除”时也会引发此日志。任何帮助,将不胜感激。
感谢,Viren
答
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);
}
}
}
}
答
你可以施放sender对象到一个ContextMenuItem并检查它的名称属性:
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
或者你对不同ContextItems添加不同的事件处理程序。