2011-06-17 115 views
2

我正在製作一個麻將遊戲,而我在C#中完全是新手,我不知道如何在點擊按鈕時點擊按鈕的名稱。所有按鈕都是在表單中動態創建的。如何在點擊時動態創建按鈕的名稱?

public Button createButton(node x) 
    { 
     Button nButton; 
     nButton = new Button(); 
     nButton.Name = x.info.ToString(); 
     nButton.Text = x.info.ToString(); 
     nButton.Width = 55; 
     nButton.Height = 75; 
     nButton.Visible = true; 
     if (x.isValid()) 
      nButton.Enabled = true; 
     else 
      nButton.Enabled = false; 
     nButton.Click += new System.EventHandler(n1_click); 
      return nButton; 
    } 
形式

我把按鈕與此代碼

myButton = createButton(tp); 
myButton.Location = new System.Drawing.Point(25 , 25); 
this.Controls.Add(myButton); 

回答

4

的第一個參數的事件處理程序是發送者,你可以強制轉換成一個按鈕,然後訪問的名稱屬性。

這是事件處理程序的一個小例子。

private void Button_Click(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    if (button != null) 
    { 
    // Do something with button.Name 
    } 
} 

編輯:漢斯在評論中提到的,使用as可以隱藏了潛在的錯誤。使用上述示例中的as運算符將確保如果您不小心將此處理程序連接到另一個控件的事件,則代碼將親切地處理它,而不是拋出一個InvalidCastException,但這裏存在一個問題,因爲它現在默默無聞失敗你可能不會在你的代碼中找到一個錯誤。如果拋出異常,你會意識到存在問題並能夠追蹤它。所以更新的代碼會是這樣的。

private void Button_Click(object sender, EventArgs e) 
{ 
    // If sender is not a Button this will raise an exception 
    Button button = (Button)sender;  

    // Do something with button.Name 
} 
+0

謝謝您的幫助功能按鈕。 :) – 2011-06-17 12:33:57

0

用下面的代碼,你可以得到被點擊

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Button btn = (Button)sender; 
    } 
0

上處理點擊「n1_click」

private void n1_click(object sender, EventArgs e) 
{ 
    Button temp = (Button)sender; 
    string neededText = temp.Text; 
} 

相關問題