Как я могу подписать несколько кнопок на один и тот же обработчик событий и действовать в зависимости от того, какая кнопка была нажата? - PullRequest
24 голосов
/ 28 сентября 2010

У меня есть 6 кнопок, которые я хочу прикрепить к одному и тому же обработчику. Как я могу это сделать?

Ответы [ 8 ]

37 голосов
/ 28 сентября 2010

Вы можете прикрепить одно и то же событие к нескольким кнопкам, привязав один и тот же метод к каждому событию нажатия кнопки

myButton1.Click += new MyButtonClick;
myButton2.Click += new MyButtonClick;
myButton3.Click += new MyButtonClick;
myButton4.Click += new MyButtonClick;
myButton5.Click += new MyButtonClick;
myButton6.Click += new MyButtonClick;

void MyButtonClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    //here you can check which button was clicked by the sender
}
25 голосов
/ 28 сентября 2010

Когда вы подписываетесь на событие на кнопке, это просто стандартный обработчик события:

button1.Click += myEventHandler;

Вы можете использовать один и тот же код для добавления обработчиков для каждой кнопки:

button1.Click += myEventHandler;
button2.Click += myEventHandler;
button3.Click += myEventHandler;
button4.Click += myEventHandler;
button5.Click += myEventHandler;
button6.Click += myEventHandler;

Это приведет к запуску вашего обработчика в myEventHandler при нажатии любой из кнопок.

12 голосов
/ 28 сентября 2010

Просто подключите кнопки к одному и тому же событию:

myButton1.Click += Button_Click;
myButton2.Click += Button_Click;
myButton3.Click += Button_Click;
...

И соответственно обработайте кнопки:

private void Button_Click(object sender, EventArgs e)
{
    string buttonText = ((Button)sender).Text;

    switch (buttonText)
    {
        ...
    }
}

Объект sender содержит ссылку на кнопку, вызвавшую событие Click. Вы можете привести его обратно к Button и получить доступ к любому свойству, которое вам нужно, чтобы отличить фактическую кнопку.

4 голосов
/ 28 сентября 2010

Вместо двойного щелчка по событию в конструкторе вы можете вставить имя обработчика события в событие в сетке свойств дизайнера.

4 голосов
/ 28 сентября 2010

Как узнать, какая кнопка была нажата:

Используйте sender

Button myButton = (Button)sender;

sender - это параметр типа object в вашем обработчике событий.

2 голосов
/ 28 сентября 2010
myButton1.Click += new EventHandler(MyButtonClick);
myButton2.Click += new EventHandler(MyButtonClick);
myButton3.Click += new EventHandler(MyButtonClick);
myButton4.Click += new EventHandler(MyButtonClick);
myButton5.Click += new EventHandler(MyButtonClick);
myButton6.Click += new EventHandler(MyButtonClick);

public void MyButtonClick(object sender, MouseButtonEventArgs e)
{
                switch ((sender as Button).Name)
                {
                case "button1":
                    //actions
                    break;
                case "button2":
                    //actions
                    break;
                default:
                    break;
               }
}
1 голос
/ 09 декабря 2016

Я не эксперт, но я использую это, и это выглядит довольно просто

<Button x:Name="Button1" Content="Button" Click="Button_Click"/>
<Button x:Name="Button2" Content="Button" Click="Button_Click"/>

Просто дайте обеим кнопкам одинаковое событие нажатия

0 голосов
/ 29 ноября 2017

В main.axml добавьте это ко всем кнопкам

android:clickable="whateveryoulike"

и все кнопки должны иметь одинаковый идентификатор

в MainActivity

[Java.Interop.Export("whateveryoulike")]
void whateveryoulike2(View v){
Button button=(Button) v;
//your code here
}

название метода не имеет значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...