我正在为Context Items
添加Context Menu
,并根据用户选择向用户显示所需的Items
。我想为用户context items
和NEW
显示这些CLOSE
..
我做了一些像
这样的事情ContextMenu.Add(NEW)
ContextMenu.Add(CLOSE)
但我按照排序顺序得到此信息,例如CLOSE
首先和NEW
最后。但我需要先显示NEW
,然后再显示CLOSE
。是否可以这样做。
答案 0 :(得分:3)
这个(非常基本的代码)应该这样做。将以下代码放在表单的构造函数中:
var contextMenu = new ContextMenu();
contextMenu.MenuItems.Add(new MenuItem("New"));
contextMenu.MenuItems.Add(new MenuItem("Close"));
this.ContextMenu = contextMenu;
注意:你仍然需要自己添加事件......:)
<强>更新强>
要向项添加事件,您必须在变量中声明它们,而不是直接在MenuItems的Add()方法中传递它们。所以前面的代码将如下所示:
var contextMenu = new ContextMenu();
var itemOne = new MenuItem("New");
itemOne.Click += ContextMenuItemClick;
contextMenu.MenuItems.Add(itemOne);
var itemTwo = new MenuItem("Close");
itemTwo.Click += ContextMenuItemClick;
contextMenu.MenuItems.Add(itemTwo);
ContextMenu = contextMenu;
正如您所看到的,bot项目具有与Click-event相同的事件处理程序。在那种情况下,您可以检查单击了哪个项目。该代码如下所示:
private void ContextMenuItemClick(object sender, EventArgs e)
{
var selectedItem = (MenuItem)sender;
switch(selectedItem.Text)
{
case "New" : //do some new stuff
break;
case "Close": //do some closing stuff
break;
}
}
请注意,你也可以为菜单中的每个项目设置一个单独的事件处理程序,但最后你会得到很多基本相同的方法...... :)希望这会有所帮助!
<强> UPDATE2:强>
在我给予的所有帮助下,你通常应该能够自己实现这一目标,不是吗? :)无论如何,对于单独的处理程序,代码将如下所示:
itemOne.Click += itemOne_Click;
itemTwo.Click += itemTwo_Click;
private void itemOne_Click(object sender, EventArgs e)
{
//do the new stuff
}
private void itemTwo_Click(object sender, EventArgs e)
{
//do the closing stuff
}
<强> UPDATE3:强>
如果您为已添加的菜单项指定了正确的名称,则可以使用Index-property更改订单。假设我在ContextMenu中添加了以下菜单项:
var itemOne = new MenuItem("New") { Name = "NewItem" };
var itemTwo = new MenuItem("Close") { Name = "CloseItem" };
'NewItem'将是第一个项目,'CloseItem'将是第二个项目。现在,如果我想更改订单而不触及上一个代码,您可以执行此操作:
contextMenu.MenuItems["NewItem"].Index = 1;
这会将'CloseItem'设置为第一个,将'NewItem'设置为第二个。如果您有两个以上的项目,最好分别为每个项目设置Index属性。