當有多個按鈕需要產生時, 如何用loop方式動態產生, 並加入對應的click event

image

1. 產生一個新的form, 並在該form上面產生MxN組的按鈕



   1: public void showForm()
   2:  
   3: {
   4:  
   5:     Form frm = new Form();
   6:  
   7:     for (int i = 0; i < m_cols; i++)
   8:  
   9:     {
  10:  
  11:         for (int j = 0; j < m_rows; j++)
  12:  
  13:         {
  14:  
  15:             Button btn = new Button();
  16:  
  17:             frm.AcceptButton = btn;
  18:  
  19:             frm.Controls.Add(btn);
  20:  
  21:             btn.Left = m_btnWidth * i;
  22:  
  23:             btn.Top = m_btnHeight * j;
  24:  
  25:             btn.Width = m_btnWidth;
  26:  
  27:             btn.Height = m_btnHeight;
  28:  
  29:             btn.Text = (j+1).ToString() + ", " + (i+1).ToString();
  30:  
  31:             btn.Click += new EventHandler(myClick);
  32:  
  33:         }
  34:  
  35:     }
  36:  
  37:     frm.Show();
  38:  
  39: }


其中 myClick定義如下


private void myClick(object sender, EventArgs e)
{
MessageBox.Show(((Button)sender).Text);
}



image

2. 指派一個panel, 在該panels上面產生MxN組的按鈕

   1: public void showOnPanel(Panel panel)
   2: {
   3:     removeAllBtns(panel);
   4:     for (int i = 0; i < m_cols; i++)
   5:     {
   6:         for (int j = 0; j < m_rows; j++)
   7:         {
   8:         Button btn = new Button();
   9:         panel.Controls.Add(btn);
  10:         btn.Left = m_btnWidth * i;
  11:         btn.Top = m_btnHeight * j;
  12:         btn.Width = m_btnWidth;
  13:         btn.Height = m_btnHeight;
  14:         btn.Text = (j+1).ToString() + ", " + (i+1).ToString();
  15:         btn.Click += new EventHandler(myClick);
  16:         }
  17:     }
  18: }

移除按鈕部分,  一趟並不會將所有panel上的button回傳, 所以加入while迴圈, 真是神奇驚訝 

 
   1: private static void removeAllBtns(Panel panel)
   2: {
   3:      while (panel.Controls.Count > 0)
   4:         foreach (Control item in panel.Controls.OfType<Button>())
   5:         {
   6:              Button btn = (Button)item;
   7:              //MessageBox.Show(btn.Text);
   8:              panel.Controls.Remove(item);
   9:         }
  10: }

產生3x4按鈕在指定的panel元件上

image

全站熱搜
創作者介紹
創作者 me1237guy 的頭像
me1237guy

天天向上

me1237guy 發表在 痞客邦 留言(0) 人氣()