Win Form Calculator: Кнопки 0 - 9 Обработчик событий для выполнения повторяющегося задания - PullRequest
4 голосов
/ 17 января 2009

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

Спасибо!

Ответы [ 2 ]

7 голосов
/ 17 января 2009

Типичная подпись обработчика событий - 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;
}
3 голосов
/ 17 января 2009

При указании обработчика событий вы можете зарегистрировать одну и ту же функцию для обработки нескольких событий (если в VS.Net перейдите в свойства, выберите раздел событий (кнопка с молнией), щелкните раскрывающийся список для Click). Таким образом, вы напишите одну функцию обработчика событий для обработки всех кнопок.

Пример (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
    }
}
...