【发布时间】:2018-02-25 23:40:13
【问题描述】:
我有三个复选框:
System.Windows.Forms.CheckBox cb1;
System.Windows.Forms.CheckBox cb2;
System.Windows.Forms.CheckBox cb3;
所有这些复选框都有相同的 CheckedChanged 事件:
this.cb1.CheckedChanged += new System.EventHandler(this.cb_CheckedChanged);
this.cb2.CheckedChanged += new System.EventHandler(this.cb_CheckedChanged);
this.cb3.CheckedChanged += new System.EventHandler(this.cb_CheckedChanged);
我有一个标志,稍后我需要根据选中的复选框在我的应用中检查它。 所以,可能性是:
- 仅 cb_1
- 仅 cb_2
- 仅 cb_3
- 仅 cb_1&cb_2
- 仅 cb_1&cb_3
- 仅 cb_2&cb_3
- 全部
所以我创建了一个枚举:
public enum LimitCbs
{
cb_1,
cb_2,
cb_3,
cb_1_2,
cb_1_3,
cb_2_3,
All,
}
目前,我的逻辑如下:
private void cb_CheckedChanged(object sender, EventArgs e)
{
if (cb1.Checked && !cb2.Checked && !cb3.Checked)
{
cfg = LimitCbs.cb_1;
}
else if (!cb1.Checked && cb2.Checked && !cb3.Checked)
{
cfg = LimitCbs.cb_2;
}
else if (!cb1.Checked && !cb2.Checked && cb3.Checked)
{
cfg = LimitCbs.cb_3;
}
else if (cb1.Checked && cb2.Checked && !cbxExportOnlyManholes.Checked)
{
cfg = LimitCbs.cb_1_2;
}
else if (cb1.Checked && !cb2.Checked && cb3.Checked)
{
cfg = LimitCbs.cb_1_3;
}
else if (!cb1.Checked && cb2.Checked && cb3.Checked)
{
cfg = LimitCbs.cb_2_3;
}
else if (cb1.Checked && cb2.Checked && cb3.Checked)
{
cfg = LimitCbs.All;
}
}
有没有更奇特的方法来检查所有要求?
【问题讨论】:
标签: c# .net winforms checkbox refactoring