Можно ли повернуть пункты контекстного меню или отменить сортировку - PullRequest
0 голосов
/ 06 марта 2012

Я добавляю Context Items для Context Menu и показываю необходимые Items, где это необходимо для пользователя, на основе выбора пользователя.Я хотел бы показать эти context items для пользователя NEW и CLOSE ..

Я сделал что-то вроде

ContextMenu.Add(NEW)
ContextMenu.Add(CLOSE)

Но я получаю это в отсортированном порядке, какCLOSE первый и NEW последний.Но мне нужно отобразить NEW первым и CLOSE последним.Можно ли это сделать.

1 Ответ

3 голосов
/ 06 марта 2012

Это (очень простой код) должно это сделать.Поместите следующий код в конструктор вашей формы:

var contextMenu = new ContextMenu();
contextMenu.MenuItems.Add(new MenuItem("New"));
contextMenu.MenuItems.Add(new MenuItem("Close"));
this.ContextMenu = contextMenu;

Примечание: вы все равно должны добавить события самостоятельно ...:)

Обновить:

Чтобы добавить события к элементам, вы должны объявить их в переменной, а не передавать их непосредственно в метод Add () для MenuItems.Таким образом, предыдущий код будет выглядеть следующим образом:

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;

Как видите, элементы ботов имеют одинаковый обработчик событий для события Click.В этом случае вы проверяете, какой элемент был нажат.Этот код выглядит следующим образом:

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;
    }
}

Обратите внимание, что вы также можете установить отдельный обработчик событий для каждого элемента в меню, но затем вы получите множество методов для в основном одного и того же материала ... :)Надеюсь, это поможет!

Обновление2:

При всей моей помощи, вы, как правило, должны были достичь этого самостоятельно, не так ли?:) В любом случае, для отдельного обработчика код будет выглядеть так:

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.Скажем, у меня есть следующие пункты меню, добавленные в 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 для каждого элемента в отдельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...