2011-06-17 75 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; 
} 

相关问题