c#复选框问题

时间:2011-07-24 01:33:19

标签: c# winforms checkbox textbox

我想尽量减少为这个小问题编写的代码量。我有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. 是否可以改进此代码,以最大限度地减少将来必须编写的代码量。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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时,你也调用了第二个复选框事件处理程序,因此它将启用文本并使第一个禁用...如果您不希望再次触发处理程序处理程序,则应在代码更新时按-=删除事件处理程序..而且我在代码中执行的操作样品提供。

答案 2 :(得分:0)

我同意Yahia。如果你确实需要明确提供两个选项,那么你应该考虑使用RadioButtons。

答案 3 :(得分:0)

除非你有一个往返于服务器的往返行程以禁用复选框选择更改的文本框的原因,为什么不通过javascript在客户端进行全部操作?