应用场景:
A、B、C、D 四个checkbox控件, 还有一个checkbox控件名为 X当X.checked等于true的时候, ABCD的checked都等于true,当X.checked等于false的时候,ABCD的checked都等于false,
只要ABCD任何一个checked=false, X.checked=false,并且ABCD中的其它的checked保持不变; 请问如何实现?
A、B、C、D 四个checkbox控件, 还有一个checkbox控件名为 X当X.checked等于true的时候, ABCD的checked都等于true,当X.checked等于false的时候,ABCD的checked都等于false,
只要ABCD任何一个checked=false, X.checked=false,并且ABCD中的其它的checked保持不变; 请问如何实现?
public selected changed(object sender,... e)
{
foreach(Control c in Controls)
{
if(c is CheckBox)
{
(c as CheckBox).checked=c==sender?e.checked:false;
}
}
{
foreach(Control c in this.Controls)
{
if(c is CheckBox && !c.Equals(chkX) )
(c as CheckBox).Checked = chkX.Checked;
}
}
{
InitializeComponent();
this.A.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.B.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.C.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.D.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.X.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
}
private void CB_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = sender as CheckBox;
if (cb == null) return; if (cb.Name == "X")
{
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
}
else
{
if (A.Checked == false || B.Checked == false || C.Checked == false || D.Checked == false)
{
X.Checked = false;
} }
}
if(sender==a)
{
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
return;
}
if(A.Checked && B.Checked && C.Checked && D.Checked==false)
X.Checked=false;
if(sender==a)
{
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
return;
}
if(A.Checked && B.Checked && C.Checked && D.Checked==false)
X.Checked=false;经验证:点击X,C,D都没有被Checked=true,X的Checked也没有等true;
==================================================================
应用场景:
A、B、C、D 四个checkbox控件, 还有一个checkbox控件名为 X当X.checked等于true的时候, ABCD的checked都等于true,当X.checked等于false的时候,ABCD的checked都等于false,
只要ABCD任何一个checked=false, X.checked=false,并且ABCD中的其它的checked保持不变;
this.B.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.C.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.D.CheckedChanged += new System.EventHandler(this.CB_CheckedChanged);
this.X.CheckedChanged += new System.EventHandler(this.X_CheckedChanged);
private void CB_CheckedChanged(object sender, EventArgs e)
{
X.Checked=A.Checked && B.Checked && C.Checked && D.Checked;
}private void X_CheckedChanged(object sender, EventArgs e)
{
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
}
bool xChecked = false;
private void X_CheckedChanged(object sender, EventArgs e)
{
if (X.Checked != xChecked)
{
xChecked = X.Checked;
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
}
}private void cb_CheckedChanged(object sender, EventArgs e)
{
xChecked = A.Checked && B.Checked && C.Checked && D.Checked;
if (X.Checked != xChecked) X.Checked = xChecked;
}
不用类级变量也行,直接存在Tag属性里...
private void CB_CheckedChanged(object sender, EventArgs e)
{
X.Tag = A.Checked && B.Checked && C.Checked && D.Checked;
if (X.Checked != (bool)X.Tag) X.Checked = (bool)X.Tag;
}private void X_CheckedChanged(object sender, EventArgs e)
{
if (X.Tag == null || X.Checked != (bool)X.Tag)
{
X.Tag = X.Checked;
A.Checked = B.Checked = C.Checked = D.Checked = (bool)X.Tag;
}
}
{
A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
return;
}
if(A.Checked && B.Checked && C.Checked && D.Checked==false)
X.Checked=false;