获取发件人姓名事件处理

时间:2013-11-30 05:16:39

标签: c# eventargs

我希望这个名字能够证明我的问题......所以,我刚刚开始制作一个记忆游戏,并且有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 个答案:

答案 0 :(得分: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);}
    }

答案 1 :(得分:2)

发件人对象实际上是启动事件的Control,您可以将其转换为正确的类型以访问其所有属性。您可以按照规定使用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); }
}