【问题标题】:c# checkbox problemc#复选框问题
【发布时间】:2011-10-11 21:03:26
【问题描述】:

我想尽量减少为这个小问题编写的代码量。我有 1 个文本框与 2 个复选框有关系,即是和否。表单加载的文本框设置为禁用。当 yes 复选框被更改时,此事件发生 -

private void checkYes1_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = true;
    checkNo1_cbx.Checked = false;
}

当 no 复选框被更改时 -

private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = false;
    checkYes1_cbx.Checked = false;
}

虽然另一个问题是我必须按两次是才能检查。

这是针对表格上的一个问题,到目前为止,它最多有 11 个问题,将来还会添加更多问题。所以到目前为止我的两个问题是 -

  1. 如果复选框被更改,我该如何解决问题,我必须再次按下它才能检查它。

  2. 是否有可能改进此代码以最大限度地减少我将来必须编写的代码量。

【问题讨论】:

    标签: c# winforms checkbox textbox


    【解决方案1】:
    private void checkYes1_CheckedChanged(object sender, EventArgs e)
    {
        OnCheck(true);
    }
    private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
    {
        OnCheck(false);
    }
    
    private void OnCheck(bool yes)
    {
        textBox14.Enabled = yes;
        checkNo1_cbx.CheckedChanged -= checkNo1_cbx_CheckedChanged;
        checkNo2_cbx.CheckedChanged -= checkYes1_CheckedChanged;
        checkNo1_cbx.Checked = !yes;
        checkNo2_cbx.Checked = yes;
        checkNo1_cbx.CheckedChanged += checkNo1_cbx_CheckedChanged;
        checkNo2_cbx.CheckedChanged += checkYes1_CheckedChanged;
    }
    

    但是请考虑使用RadioBox 而不是CheckBox,因为如果一个被选中,你想取消另一个..

    编辑:在您之前的设计中,您弄错了changed I have to press it again to check it,因为您为每个复选框分配了两个事件处理程序。现在在您的代码中,当第一个被选中时,您将禁用文本框并使另一个未选中,但是当您调用另一个未选中 Checked = false 时,您也在调用第二个复选框事件处理程序,因此它将启用文本并使第一个禁用...如果您不希望再次触发处理程序处理程序,则应在更新代码时通过-=删除事件处理程序。这就是我在提供的代码示例中所做的。

    【讨论】:

    • 您需要根据 OP 的要求扩展代码以容纳更多复选框/文本框。
    【解决方案2】:

    为什么要使用 2 个复选框?一个复选框 (check1) 就足够了:

    private void check1_CheckedChanged(object sender, EventArgs e)
    {
        textBox14.Enabled = check1.Checked;
    }
    

    编辑: 假设每个问题意味着 1 个文本框,那么每个文本框需要 1 个复选框......这可以通过使用更复杂的方法进一步改进

    【讨论】:

      【解决方案3】:

      除非有理由来回往返服务器以禁用复选框选择更改时的文本框,否则为什么不通过 javascript 在客户端执行所有操作?

      【讨论】:

        【解决方案4】:

        我同意叶海亚的观点。如果您确实需要明确提供这两个选项,那么您应该考虑使用 RadioButtons。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-28
          • 2011-03-15
          • 1970-01-01
          • 2011-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多