Получить обработчик события имени отправителя

Надеюсь, это имя оправдывает мой вопрос... Итак, я только начал создавать игру на память, и для отображения элементов я использую 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);}
    }

2 ответа

Попробуйте установить 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);}
    }

Объект-отправитель на самом деле является элементом управления, который инициировал событие, вы можете привести его к нужному типу, чтобы получить доступ ко всем его свойствам. Вы можете использовать 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); }
}
Другие вопросы по тегам