2013-11-30 2 views
5

Надеюсь, что имя дает справедливость моему вопросу ... Итак, я только начал делать игру с памятью, и есть 25 флажков, которые я использую для показа предметов.Получить обработчик события имени отправителя

Мне было интересно, есть ли способ сказать EventArgs или Object, какую кнопку он был отправлен, если каждая кнопка использовала тот же обработчик событий.

private void checkBox_CheckedChanged(object sender, EventArgs e) 
    { 
     checkBox = Code which will determine what checkBox sent it. 
     if (checkBox.Checked) 
     { Box.ChangeState(checkBox, true); } 
     else { Box.ChangeState(checkBox, false);} 
    } 
+0

Это то, что «отправитель» - это то, что вызывает событие. –

+0

Я не уверен, возможно ли это, но если вы создадите свой собственный подкласс «EventArgs» и передаете его как параметр, вы можете определить имя метода там. Но пока я не нашел способ перезаписать стандартную подпись. –

+0

Спасибо @EvanTrimboli, не знал, правильно ли я задал вопрос. – Mathias

ответ

9

Попробуйте установить атрибут каждого флажка Name при определении их, а затем с помощью ((CheckBox)sender).Name для идентификации каждого отдельного флажка.

время Определения:

CheckBox chbx1 = new CheckBox(); 
chbx1.Name = "chbx1"; 
chbx1.CheckedChanged += checkBox_CheckedChanged; 
CheckBox chbx2 = new CheckBox(); 
chbx2.Name = "chbx2"; 
chbx2.CheckedChanged += checkBox_CheckedChanged; 
CheckBox chbx3 = new CheckBox(); 
chbx3.Name = "chbx2"; 
chbx3.CheckedChanged += checkBox_CheckedChanged; 

И

private void checkBox_CheckedChanged(object sender, EventArgs e) 
    { 
     string chbxName = ((CheckBox)sender).Name; 
     //Necessary code for identifying the CheckBox and following processes ... 
     checkBox = Code which will determine what checkBox sent it. 
     if (checkBox.Checked) 
     { Box.ChangeState(checkBox, true); } 
     else { Box.ChangeState(checkBox, false);} 
    } 
2

Объект отправителя фактически управление, который инициировал событие, вы можете привести его к соответствующему типу, чтобы получить доступ ко всем его свойств. Вы можете использовать Name, как указано, или, как я иногда делаю, это использовать свойство Tag. Но в этом случае нужно просто отбрасывать отправителя на CheckBox.

private void checkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox cb = (CheckBox)sender; 
    if (cb.Checked) 
    { Box.ChangeState(cb, true); } 
    else { Box.ChangeState(cb, false); } 
} 
Смежные вопросы