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

У меня есть форма с двумя кнопками: btn_oldFile и btn_newFile. Обе кнопки при нажатии вызывают функцию btnOnClick:

btn_oldFile.Click += btnOnClick;
btn_newFile.Click += btnOnClick;

protected void OldFileBrowse_Click(object sender, EventArgs args)
        {
            //if btn_oldFile called
                // print to tbx_OldFile
            //else
                //print to tbx_NewFile
        }

По большей части btnOnClick должен делать одно и то же независимо от того, какая кнопка вызывала себя, за исключением присвоения значения переменной. Если btn_oldFile вызывает метод, я печатаю некоторый текст в текстовое поле: tbx_OldFile, а если btn_newFile вызывает его, текст печатается в tbx_NewFile.

Как узнать, какая кнопка была той, которая вызвала метод?

Ответы [ 3 ]

9 голосов
/ 05 ноября 2010

Объект, вызвавший событие, передается в обработчик события как параметр отправителя, поэтому вы можете привести его к правильному типу для доступа к нему.

protected void OldFileBrowse_Click(object sender, EventArgs args)
{
    Button btn = (Button)sender;
}

Редактировать: затем вы можете использовать базовое выражение if, чтобы проверить, какая это кнопка.

if (btn == btn_oldFile) // etc..
2 голосов
/ 05 ноября 2010

Вы хотите проверить, является ли отправитель btn_oldFile или btn_newFile.

Вы можете сделать это так:

if (sender == btn_oldFile)<br> { // print to tbx_oldFile }<br> else<br> { // blah }

0 голосов
/ 05 ноября 2010

Как указал Фара, когда происходит щелчок, Button, вызывающий щелчок, будет первым параметром.Однако это решение требует приведения и может быть сорвано производным типом, вызывающим метод и не передающим тип Button в слот sender.

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

btn_oldFile.Click += delegate { OldFileBrowse_Click(btn_oldFile); };
btn_newFile.Click += delegate { OldFileBrowse_Click(btn_newFile); };

protected void OldFileBrowse_Click(Button sender) {
  //if btn_oldFile called 
    // print to tbx_OldFile 
  //else 
    //print to tbx_NewFile 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...