2016-12-04 97 views
2

我需要使用多個按鈕的單個事件處理程序。我根據數據庫查詢通過while循環生成了這些按鈕。我創建了一個單一的方法C#動態genarate按鈕單個事件處理程序

void MyButtonClick(object sender, EventArgs e) 
{ 
} 

我是新來的C#。如何將所有按鈕的事件綁定到單個處理程序。

代碼用於產生按鈕:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    {   
     try 
     { 
      MydbConnection db = new MydbConnection(); 
      MySqlConnection con = db.connection(); 
      MySqlCommand cmd = new MySqlCommand(); 

      cmd.CommandText = "select * from categories where online = 1"; 
      cmd.Connection = con; 

      MySqlDataReader rd; 
      con.Open(); 
      rd = cmd.ExecuteReader(); 

      int i = 1; 
      while (rd.Read()) 
      { 
       Button btn = new Button(); 
       btn.Name = "btn-" + i.ToString(); 
       btn.Tag = i; 
       btn.Text = rd.GetString(2).ToString(); 

       btn.Height = 60; 
       btn.Width = 100; 
       btn.Location = new Point(900, 60 * i + 10); 

       this.Controls.Add(btn); 
       i++; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

回答

0

歡迎SO。您可以前this.Controls.Add(btn);

btn.Click += MyButtonClick; 
+0

如何將'btn.name'設置爲'MyButtonClick()'.. pls – user3722956

+0

您無法設置名稱。因爲它是隻讀的。我懷疑你需要知道名稱,知道點擊了哪個按鈕?如果是這種情況,你可以像這樣拋出'sender'對象:'var btn =(Button)sender',不要忘記檢查null。 – Emad

+1

謝謝你幫助我.. – user3722956

0

添加這個正確的你需要他們所有的單擊屬性設置爲相同的事件處理程序:

btn.Click += new EventHandler(MyButtonClick);

這應該讓這個任何時候你點擊任何的按鈕,MyButtonClick()是觸發的事件。當然,如果你需要弄清楚哪個按鈕被點擊,那麼你需要的情況下,其中「i」是價值你在循環按鈕分配的數量的一個內檢查sender參數:

(if sender == btn-i) then .... 
相關問題