委托替换重复代码

时间:2012-12-25 14:29:18

标签: c# delegates checkbox

我在组框中有10个复选框。标有“全部”的顶部复选框检查“全部”

时选中的其他9个复选框

在其他9个复选框中,我的代码基本相同。以下是两个复选框的示例:

private void ckDal_Click(object sender, EventArgs e)
    {
        if (ckDal.Checked == false)
            ckAll.Checked = false;
    }

    private void ckHou_Click(object sender, EventArgs e)
    {
        if (ckHou.Checked == false)
            ckAll.Checked = false;
    }

我讨厌重复相同的代码。如何使用一个事件方法创建一个代理来完成上述操作?

2 个答案:

答案 0 :(得分:2)

您可以为所有CheckBox使用单个Click事件处理程序。引发事件的实际CheckBox将从sender参数中提供。只需将其转换为CheckBox类型:

private void ck_Click(object sender, EventArgs e)
{
    if (!((CheckBox)sender).Checked)
        ckAll.Checked = false;
}

此外,您不需要将布尔值与true / false进行比较 - 您可以直接在if语句中使用它们。

BTW 您还应该在检查所有CheckBox时验证大小写,并在这种情况下设置ckAll.Checked = true

答案 1 :(得分:1)

private void CheckBoxClick(object sender, EventArgs e)
{        
    if (!((CheckBox)sender).Checked)
        ckAll.Checked = false;
}