如何在单击时动态创建按钮的名称?

时间:2011-06-17 12:26:39

标签: c# winforms

我正在制作麻将游戏,而且我对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);

3 个答案:

答案 0 :(得分:4)

事件处理程序的第一个参数是发送者,您可以将其强制转换为Button,然后访问Name属性。

以下是事件处理程序的一个小例子。

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

编辑:正如Hans在评论中提到的,使用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
}

答案 1 :(得分:0)

使用以下代码,您可以获得单击的按钮

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

答案 2 :(得分:0)

处理点击“n1_click”的功能

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

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