#c# #winforms #contextmenu #menuitem
#c# #winforms #contextmenu #menuitem
Вопрос:
Я работаю в Windows Forms на C #. У меня есть метод, в котором я добавляю MenuItem
s к ContextMenu
, и я реализовал обработчики событий для MenuItem
них, как показано ниже:
public void Form1_Load()
{
int index = 0;
ArrayList ar = new ArrayList();
ContextMenu cm = new ContextMenu();
cm.Name = "Test";
MenuItem mi = new MenuItem("All");
mi.Click = new EventHandler(mi_All);
}
private void mi_All(object sender, EventArgs e)
{
// Here I want to access the arraylist and integer specified in above method
}
Как это можно сделать? Одним из возможных решений является объявление ArrayList
и int
как глобальных переменных, но у меня есть много переменных, подобных этой. Если я использую этот подход, переменные будут действовать до тех пор, пока форма не будет удалена. Итак, это не работает. Есть ли другой способ добиться этого?
Комментарии:
1. Вопрос в том, зачем вам нужен доступ к списку массивов? Рассмотрите возможность использования свойства tag элемента меню для дополнительного хранилища.
Ответ №1:
Один из вариантов:
mi.Click = delegate (object sender, EventArgs e) { mi_All(sender, e, ar, index); };
...
private void mi_All(object sender, EventArgs e, ArrayList ar, int index)
{
...
}
Другой:
mi.Tag = new object[] { ar, index };
...
private void mi_All(object sender, EventArgs e)
{
ArrayList ar = (ArrayList)((object[])((MenuItem)sender).Tag)[0];
int index = (int)((object[])((MenuItem)sender).Tag)[1];
...
}
Комментарии:
1. Я могу сделать это для доступа. Спасибо за решение. Аналогично, если я хочу вернуть индекс, который будет обновлен в методе обработчика событий, для этого существует любой способ. Пожалуйста, дайте мне знать.
Ответ №2:
У MenuItem
есть Tag
свойство, которое можно использовать для назначения любой пользовательской информации, которая вам нравится. Поэтому назначьте этому все, что вам нужно для доступа при вызове обработчика событий. В вашем примере вы бы назначили целочисленный индекс элемента enu, а затем внутри обработчика событий использовали бы его в качестве индекса в поле ArrayList уровня формы.