【问题标题】:Delegate to replace repeating code代表替换重复代码
【发布时间】:2012-12-25 22:39:30
【问题描述】:

我在一个组框中有 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;
    }

我讨厌重复相同的代码。我将如何创建一个委托来仅使用一种事件方法来完成上述任务?

【问题讨论】:

    标签: c# delegates checkbox


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢所有复选框都被选中的情况。
    【解决方案2】:
    private void CheckBoxClick(object sender, EventArgs e)
    {        
        if (!((CheckBox)sender).Checked)
            ckAll.Checked = false;
    }
    

    【讨论】:

    • 谢谢,这篇文章很有帮助
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2011-05-04
    • 2015-08-26
    • 2016-06-13
    • 2017-07-07
    • 2013-10-12
    相关资源
    最近更新 更多