应用场景:
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保持不变; 请问如何实现?

解决方案 »

  1.   

    checkbox控件的selectedchanged事件上统一的事件
    public selected changed(object sender,... e)
    {
     foreach(Control c in Controls)
     {
      if(c is CheckBox)
      {
      (c as CheckBox).checked=c==sender?e.checked:false;
      }
     }
      

  2.   

    好像有点类似全选按钮的作用,这里把X当作全选按钮,其他为单项选择void chkX_CheckedChanged(object sender, EventArgs e)
    {
        foreach(Control c in this.Controls)
        {
             if(c is CheckBox && !c.Equals(chkX) )
                  (c as CheckBox).Checked = chkX.Checked;
        }
    }
      

  3.   

      public Frm_Test()
            {
                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;
                    }            }
            }
      

  4.   

    没有验证,楼上的应该没问题,简化一下楼上的代码
    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; 
      

  5.   

    sender==aa 是什么呢  checkbox ?
      

  6.   


    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保持不变;
     
      

  7.   

    需要那么复杂吗?两句代码的事儿,都大脑短路了吧...  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.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;
    }
      

  8.   

    加个类级变量就解决了...
    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;
        }
    }
      

  9.   

    if(sender==a)//这里写错了,应该是if(sender==x)  x就是那个控件
    {
      A.Checked = B.Checked = C.Checked = D.Checked = X.Checked;
      return;
    }
    if(A.Checked && B.Checked && C.Checked && D.Checked==false)  
      X.Checked=false;