2012-12-25 57 views
0

我在组框中有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

您可以对所有CheckBox使用单一的Click事件处理程序。实际CheckBox会引发事件,将从sender参数中获得。只需将它转换为复选框类型:

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

你也不必布尔值与真/假比较 - 你可以在if声明中直接使用它们。

顺便说一句你也应该验证所有复选框被选中时的情况,并在这种情况下设置ckAll.Checked = true

+1

谢谢你关于所有复选框被选中的情况。 – skibikegold

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

谢谢,这篇文章很有帮助 – skibikegold