Как я могу взять имя динамически созданных кнопок, когда они нажимаются? - PullRequest
2 голосов
/ 17 июня 2011

Я делаю игру в маджонг, и я совершенно новичок в 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 ]

4 голосов
/ 17 июня 2011

Первым аргументом обработчика событий является отправитель, вы можете привести его к кнопке и затем получить доступ к свойству Name.

Вот небольшой пример обработчика событий.

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 голосов
/ 17 июня 2011

для функции, которая обрабатывает щелчок "n1_click"

</p> <pre><code>private void n1_click(object sender, EventArgs e) { Button temp = (Button)sender; string neededText = temp.Text; }

0 голосов
/ 17 июня 2011

С помощью следующего кода вы можете получить кнопку, на которую нажали

    protected void Button1_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...