Правильный дизайн заключался бы в отделении элементов пользовательского интерфейса от действий, которые должны выполняться при активации элемента пользовательского интерфейса.
Таким образом, обработчик события нажатия кнопки не должен выполнять действие, он должен вызывать метод, выполняющий это действие.
Причина этого разделения заключается в том, что он позволяет вам выполнять это действие, используя другие элементы интерфейса. Типичный пример - кнопка, которая выполняет то же действие, что и пункт меню. В вашем случае: действие одинаково независимо от того, нажимаете ли вы кнопку или выбираете ее из поля со списком.
private void OnFileNew() {...}
private void OnFileOpen() {...}
private void OnFileSave() {...}
private void OnButtonFileNewClicked(object sender, EventArgs e)
{
this.OnFileNew();
}
private void OnMenuItemFileNewClicked(object sender, EventArge e)
{
this.OnFileNew();
}
Dictionary<string, Action> comboActions = new Dictionary<string, Action>()
{
{ this.ButtonFileNew.Name, OnFileNew },
{ this.ButtonFileOpen.Name, OnFileOpen },
{ this.ButtonFileSave.Name, OnFileSave },
...
}
// fill the name with the names of the comboActions:
comboBox1.Items.AddRange(comboActions.Keys);
private void OnComboItemSelected(object sender, ...)
{
string selectedName = ((ComboBox)sender).SelectedValue;
Action selectedAction = comboActions[selectedName];
// execute the selectedAction:
selectedAction();
}
Другая возможность - добавить KeyValuePairs в поле со списком1.Items. Отобразите ключ, и когда элемент выбран, выберите значение. Таким образом, вам не понадобится отдельный словарь. Однако у этого есть тот же недостаток, что вы можете сделать это, только выбирая элементы из поля со списком. Если вам также нужен ListBox с этой функциональностью, лучше использовать отдельный словарь.