开发者

How can i take dynamically created buttons' name when they are clicked?

I'm making a mahjong game and I'm totally new at C#, I wonder how i can take a button's name when it's clicked. All the buttons are created dynamically in the form.

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
 开发者_如何学JAVA           nButton.Enabled = false;
         nButton.Click += new System.EventHandler(n1_click);
            return nButton;
    }

in the form i take buttons with this code

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


The first argument to the event handler is the sender, you can cast that to a Button and then access the Name property.

Here is a small example of the event handler.

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

Edit: As Hans mentioned in the comments, using as could hide a potential bug. Using the as operator as in the example above will ensure that if you inadvertently wire this handler to an event of another control the code will handle it graciously and not throw an InvalidCastException, but there-in lies a problem as well, because this now silently fails you might not pickup a bug in your code. If the exception was thrown you would have realized there is a problem and been able to track it down. So the updated code would be something like this.

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
}


With the following code you can get the button that was clicked

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


on the function which handles the click "n1_click"

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜