none
請問要如何在不同groupbox 呼叫同一個方法? RRS feed

  • 問題

  • 請問我要如何將不同的groupbox1~3 加入EventHandler ,呼叫同一個方法CheckBox_CheckedChanged()

    const int MAX_CHECKED_COUNT =3;
     int _checkedCount;
     private void Form1_Load(object sender, EventArgs e)
     {
      foreach (Control c in groupBox1.Controls)
      {
      ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
      }
     }
    
     private void CheckBox_CheckedChanged(object sender, EventArgs e)
     {
      CheckBox c = sender as CheckBox;
      _checkedCount += (c.Checked) ? 1 : -1;
      if (c.Checked && _checkedCount > MAX_CHECKED_COUNT)
      {
      MessageBox.Show("超過可選取的上限個數");
      c.Checked = false;
      }
     }
    2010年12月18日 下午 12:06

解答

  • ....多呼叫幾次。

     

    for(int i=1;i<=3;i++){
      GroupBox groupBox = FindControl("groupBox" + i);
      foreach (Control c in groupBox.Controls)
      {
       ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
      }
    }
    
    2010年12月18日 下午 01:50
  • private void Form1_Load(object sender, EventArgs e)
            {
                foreach (Control c in Controls)
                {
                    if (c is GroupBox)
                    {
                        GroupBox gb = c as GroupBox;
                        foreach (CheckBox cb in gb.Controls)
                        {
                            cb.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
                        }
                    }
                }

            }

    2010年12月18日 下午 02:50
  •  

        private void Form1_Load(object sender, EventArgs e)
        {
          for (int i = 1; i <= 3; i++)
          {
            foreach (Control c in this.Controls["groupBox" + i.ToString()].Controls)
            {
              ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
            }
          }
        }
    

    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月18日 下午 03:26
    版主
  • hi

    修改如下後嘗試看看

    foreach( Control c in this.Controls[ "groupBox" + i.ToString() ].Controls )
                    {
                        if( c.GetType() == typeof( CheckBox) )
                        {
                            ( ( CheckBox ) c ).CheckedChanged += new EventHandler( CheckBox_CheckedChanged );
                        }
                    }



    2010年12月19日 上午 05:49

所有回覆

  • ....多呼叫幾次。

     

    for(int i=1;i<=3;i++){
      GroupBox groupBox = FindControl("groupBox" + i);
      foreach (Control c in groupBox.Controls)
      {
       ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
      }
    }
    
    2010年12月18日 下午 01:50
  • 抱歉...不太懂,我有照你的方式...可是不能耶...請問 FindControl() ??是哪來
    2010年12月18日 下午 01:59
  • private void Form1_Load(object sender, EventArgs e)
            {
                foreach (Control c in Controls)
                {
                    if (c is GroupBox)
                    {
                        GroupBox gb = c as GroupBox;
                        foreach (CheckBox cb in gb.Controls)
                        {
                            cb.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
                        }
                    }
                }

            }

    2010年12月18日 下午 02:50
  •  

        private void Form1_Load(object sender, EventArgs e)
        {
          for (int i = 1; i <= 3; i++)
          {
            foreach (Control c in this.Controls["groupBox" + i.ToString()].Controls)
            {
              ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
            }
          }
        }
    

    歡迎參觀我的Blog.NET菜鳥自救會
    2010年12月18日 下午 03:26
    版主
  • hi

    修改如下後嘗試看看

    foreach( Control c in this.Controls[ "groupBox" + i.ToString() ].Controls )
                    {
                        if( c.GetType() == typeof( CheckBox) )
                        {
                            ( ( CheckBox ) c ).CheckedChanged += new EventHandler( CheckBox_CheckedChanged );
                        }
                    }



    2010年12月19日 上午 05:49
  • 不要蒙著眼睛寫程式, 把基礎觀念弄清楚吧. 這樣的討論對你實質的幫助很低, 因為都在抄,  沒在想.

    程式設計概念

    C# Programming Guide

    2010年12月19日 上午 05:55
  • 我改成這樣程式可以跑,不會出錯...可是卻跟我要的功能不同...變成groupbox1~3 的checkbox 超過三個就  MessageBox.Show("超過可選取的上限個數");
    還在想說要如何將各自 groupbox1 ~3 超過三個checkbox 時,各自彈出MessageBox.Show("超過可選取的上限個數");

    const int MAX_CHECKED_COUNT =3;
     int _checkedCount;

    GroupBox [] gb_ck=new GroupBox[3] {groupBox1,groupBox3,groupBox5};

                for (int i = 0; i < gb_ck.Length; ++i)
                {

                    foreach (Control c in gb_ck[i].Controls)
                 
                    {
                        
                        ((CheckBox)c).CheckedChanged += new EventHandler(CheckBox_CheckedChanged);
                       
                    }
                }  

     private void CheckBox_CheckedChanged(object sender, EventArgs e)
     {
     CheckBox c = sender as CheckBox;
     _checkedCount += (c.Checked) ? 1 : -1;
     if (c.Checked && _checkedCount > MAX_CHECKED_COUNT)
     {
     MessageBox.Show("超過可選取的上限個數");
     c.Checked = false;
     }
     }
    2010年12月19日 上午 06:40
  • 請問 C# 要如何達到這樣效果...
    http://kkbruce.blogspot.com/2009/08/event-handler.html
    2010年12月19日 上午 08:05
  • 上面阿尼, 小歐 , tihs, ricoisme 每個人寫的code都在達到那個效果. 你只是不願意去看資料罷了.

    MSDN裡面就有說明了, 為什麼不看看再想一想呢 ?

    處理和引發事件

    2010年12月19日 上午 08:34