У меня есть интерфейс формы выигрыша, который выглядит как обычный калькулятор. Естественно, я не хочу переписывать одну и ту же логику для каждой отдельной цифровой кнопки (0-9). Я хочу знать, какая кнопка была нажата, чтобы выполнять вычисления на основе ее свойства текста. Должен ли я просто создать метод, который принимает объект кнопки в качестве параметра, чтобы способствовать повторному использованию кода? Есть ли способ лучше? Я хотел бы услышать, как с этим справятся более опытные разработчики приложений Win Form. Я пытаюсь сохранить свою логику вне пользовательского интерфейса.
Спасибо!





При указании обработчика событий вы можете зарегистрировать одну и ту же функцию для обработки нескольких событий (в VS.Net перейдите в свойства, выберите раздел событий (кнопка с молнией), щелкните раскрывающийся список для нажатия). Таким образом, вы напишете одну функцию-обработчик событий для обработки всех кнопок.
Пример (C#), если создание кнопки и регистрация события выполняются в коде:
public void digitButtons_Click(object sender, EventArgs eventArgs) {
if (sender is Button) {
string digit = (sender as Button).Text;
// TODO: do magic
}
}
public void createButtons() {
for(int i = 0; i < 10; i++) {
Button button = new Button();
button.Text = i.ToString();
button.Click += digitButtons_Click;
// TODO: add button to Form
}
}
Да, мне пришлось объяснить это в одном из комментариев к исходному посту автора ниже.
Типичная сигнатура обработчика событий - void EventHandler(object sender, EventArgs e). Важной частью здесь является object sender. Это объект, вызвавший событие. В случае события щелчка Button отправителем будет этот Button.
void digitButton_Click(object sender, EventArgs e)
{
Button ButtonThatWasPushed = (Button)sender;
string ButtonText = ButtonThatWasPushed.Text; //the button's Text
//do something
//If you store the button's numeric value in it's Tag property
//things become even easier.
int ButtonValue = (int)ButtonThatWasPushed.Tag;
}
+1 за использование Control.Tag, что намного безопаснее, чем взлом с Text. В частности, я думал о вопросах локализации.
+1: Явно опередил меня ... и мне тоже нравится createButtons. Конечно, он полагается на менеджера по расположению, который сделает хорошую работу.