Калькулятор формы выигрыша: кнопки 0–9 Обработчик событий для выполнения повторяющейся задачи

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

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
3 524
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При указании обработчика событий вы можете зарегистрировать одну и ту же функцию для обработки нескольких событий (в 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
    }
}

+1: Явно опередил меня ... и мне тоже нравится createButtons. Конечно, он полагается на менеджера по расположению, который сделает хорошую работу.

lc. 17.01.2009 23:14

Да, мне пришлось объяснить это в одном из комментариев к исходному посту автора ниже.

earlNameless 18.01.2009 02:53
Ответ принят как подходящий

Типичная сигнатура обработчика событий - 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. В частности, я думал о вопросах локализации.

Wim Coenen 17.01.2009 23:47

Другие вопросы по теме