Как обрабатывать программно добавленные события кнопки? C # - PullRequest
15 голосов
/ 20 января 2010

Я делаю приложение Windows Forms, используя C #. Я добавляю кнопки и другие элементы управления программно во время выполнения. Я хотел бы знать, как обрабатывать события нажатия этих кнопок?

Ответы [ 6 ]

29 голосов
/ 20 января 2010

Попробуйте следующее

Button b1 = CreateMyButton();
b1.Click += new EventHandler(this.MyButtonHandler);
...
void MyButtonHandler(object sender, EventArgs e) {
  ...
}
20 голосов
/ 08 апреля 2012

Используйте этот код для обработки событий нажатия нескольких кнопок:

    private int counter=0;

    private void CreateButton_Click(object sender, EventArgs e)
    {
        //Create new button.
        Button button = new Button();

        //Set name for a button to recognize it later.
        button.Name = "Butt"+counter;

       // you can added other attribute here.
        button.Text = "New";
        button.Location = new Point(70,70);
        button.Size = new Size(100, 100);

       // Increase counter for adding new button later.
        counter++;

        // add click event to the button.
        button.Click += new EventHandler(NewButton_Click);
   }

    // In event method.
    private void NewButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button) sender; 

        for (int i = 0; i < counter; i++)
        {
            if (btn.Name == ("Butt" + i))
            {
                // When find specific button do what do you want.
                //Then exit from loop by break.
                break;
            }
        }
    }
3 голосов
/ 09 мая 2011

Если вы хотите увидеть, какая кнопка была нажата, вы можете сделать следующее после создания и назначения кнопок. Учитывая, что вы создаете идентификаторы кнопок вручную:

protected void btn_click(object sender, EventArgs e) {
     Button btn = (Button)sender // if you're sure that the sender is button, 
                                 // otherwise check if it is null
     if(btn.ID == "blablabla") 
         // then do whatever you want
}

Вы также можете проверить их, указав аргумент команды для каждой кнопки.

2 голосов
/ 21 января 2010

похоже, что это работает, при добавлении тега с каждым элементом массива

Button button = sender as Button;

знаете ли вы лучший способ?

2 голосов
/ 21 января 2010
0 голосов
/ 29 августа 2016

Что касается вашего комментария о том, что вы хотите знать, какая кнопка была нажата, вы можете установить для атрибута .Tag кнопки любой вид идентифицирующей строки, которую вы хотите, при ее создании, и использовать

private void MyButtonHandler(object sender, EventArgs e)
    {
        string buttonClicked = (sender as Button).Tag;
    }
...