2014-02-22 29 views
0

我創建運行時2個按鈕,我需要做的事情不同,這取決於哪個按鈕點擊,獲取價值的WinForms

下面是代碼,我已經爲click事件編寫的,但是我不知道我該如何編碼我的程序瞭解哪個按鈕被點擊的位置。

 { 
     . 
     . 
     Button btn = new Button(); 
     btn.Location = new Point(x+70,y); 
     btn.Height = 15; 
     btn.Width = 50; 
     Controls.Add(btn); 
     btn.Name = "button1"; 
     btn.Click +=btn_Click; 
     btn = new Button(); 
     btn.Location = new Point(x + 140, y); 
     btn.Height = 15; 
     btn.Width = 50; 
     Controls.Add(btn); 
     btn.Name = "button2"; 
     btn.Click += btn_Click; 
     } 

    private void btn_Click(object sender, EventArgs e) 
    { 
     // Understand which of the buttons is clicked! 
    } 

任何幫助表示讚賞。

回答

1

控件都具有Tag屬性,該屬性可以爲其分配任何對象。以編程方式創建按鈕時,您甚至不需要使用Name屬性。這裏我只使用了字符串,但是按鈕可以採取的任何獨特動作都可以被提煉爲其所需的元素,並且可以將其放入對象並分配給Tag屬性。

Button btn = new Button(); 
Controls.Add(btn); 
btn.Tag = "Hello from Button #1"; 
btn.Click += btn_Click; 

btn = new Button(); 
Controls.Add(btn); 
btn.Tag = "Hello from Button #2"; 
btn.Click += btn_Click; 

在你通過sender事件處理程序,這是引發事件的控件的引用。然後,您可以用一個簡單的投訪問其Tag屬性:

private void btn_Click(object sender, EventArgs e) 
{ 
    if (sender is Control) { 
     MessageBox.Show(((Control)sender).Tag.ToString()); 
    } 
} 

要顯示的例子,該Tag可以是任何東西:

Button btn = new Button(); 
Controls.Add(btn); 
btn.Tag = Color.Blue; 
btn.Click += btn_Click; 

btn = new Button(); 
Controls.Add(btn); 
btn.Tag = Color.Red; 
btn.Click += btn_Click; 

if (sender is Control) { 
     this.BackColor = (Color)((Control)sender).Tag; 
    } 
+0

+1!真棒,謝謝你的幫助! :) – vin

0

object sender是發起事件的對象。在你的例子中,發件人是點擊的按鈕。因此,您可以將發件人發送至Button並決定您想要做什麼。

+0

我是這麼認爲的,但我不能與發件人調整,你可以請一個例子詳細說明嗎? – vin