#c# #events #methods
#c# #Мероприятия #методы
Вопрос:
Я использую WPF C # VS.
Я должен создать что-то вокруг 100 кнопок, и каждая из них должна иметь свое собственное событие.Я также не хочу создавать их сам.
Например:
1. Кнопка Окрашивает все остальные кнопки в красный цвет. Кнопка 2. Открывает новое окно. 3. Кнопка показывает окно сообщения. … Каждый делает что-то другое!!
Итак, вопрос в том, как я могу хранить методы в массивах?
Это должно сработать примерно так:
List<Button> buttons = new List<Button>(); //Contains all buttons
void fillButtonsList() {...} //Storing Buttons in list
Method[] methods = new Method[] //Storing Methods in Arrays
{
colorAll,
openWindow,
showMessageBox,
...
}
void ApplyEvents() //Assign Methods to Events
{
for (int i = 0; i < methods.Length; i )
{
buttons[i].Click = methods[i];
}
}
void colorAll() {...} //Methos get Executed when Event got Fired
void openWindow() {...}
void showMessageBox() {...}
...
Надеюсь, вы поняли мой вопрос: мой английский не очень хорош.
Комментарии:
1. использовать
Action
вместоMethod
?2. или, может
EventHandler
быть?
Ответ №1:
Я предлагаю что-то вроде этого:
List<Button> buttons = new List<Button>(); //Contains all buttons
void fillButtonsList() {...} //Storing Buttons in list
Action[] methods = new Action[] //Storing Methods in Arrays
{
colorAll,
openWindow,
showMessageBox,
...
}
void ApplyEvents()
{
for (int i = 0; i < methods.Length; i )
{
buttons[i].Click = (s, e) => methods[i].Invoke();
}
}
void colorAll() {...}
void openWindow() {...}
void showMessageBox() {...}
…
Ответ №2:
Я решил это сам:
ContextMenu cm1 = new ContextMenu();
(string, bool, ContextMenu, RoutedEventHandler)[] ContextMenuInfo = new (string, bool, ContextMenu, RoutedEventHandler)[]
{
("1", false, cm1, event1),
("2", false, cm1, event2),
("3", false, cm1, event3),
("4", false, cm1, event4),
("5", false, cm1, event5)
};
foreach ((string, bool, ContextMenu, RoutedEventHandler) item in ContextMenuInfo)
{
MenuItem mi = MakeContextMenuMenuItem(item.Item1, item.Item2);
mi.Click = item.Item4;
item.Item3.Items.Add(mi);
}
void event1() {...}
void event2() {...}
void event3() {...}
void event4() {...}
void event5() {...}
private MenuItem MakeContextMenuMenuItem(string text, bool bold = false)
{
TextBlock tbb = new TextBlock();
if (bold)
{
tbb.Inlines.Add(new Bold(new Run(text)));
}
else
{
tbb.Text = text;
}
MenuItem mi = new MenuItem();
mi.Header = tbb;
return mi;
}