是否可以反转上下文菜单项或反转排序

时间:2012-03-06 13:04:27

标签: c# winforms

我正在为Context Items添加Context Menu,并根据用户选择向用户显示所需的Items。我想为用户context itemsNEW显示这些CLOSE ..

我做了一些像

这样的事情
ContextMenu.Add(NEW)
ContextMenu.Add(CLOSE)

但我按照排序顺序得到此信息,例如CLOSE首先和NEW最后。但我需要先显示NEW,然后再显示CLOSE。是否可以这样做。

1 个答案:

答案 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属性。