Как добавить обработчики событий onClick для динамически генерируемых кнопок в C # .net TableLayoutPanel? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь добавить кнопки в ячейки TableLayoutPanel в WinForm в C # .NET. Как вызвать событие onClick для кнопки вместо события TableLayoutPanel при нажатии на кнопку?

В нашем приложении TableLayoutPanel с несколькими строками и столбцами генерируется во время выполнения (таким образом, динамически в коде, а не через редактор форм Visual Studio) в winform из C # .NET. Ячейки в одном столбце заполнены кнопками. Мы хотели бы добавить событие onClick для этих кнопок. Однако вместо этого вызывается событие onClick TableLayoutPanel.

Я попытался создать статический пример с кнопкой в ​​TableLayoutPanel через редактор froms Visual Studio с обработчиком событий часов на кнопке. Это отлично работает.

Таким образом, вопрос заключается в следующем: как вызвать событие onClick для кнопки вместо события TableLayoutPanel при нажатии на кнопку?

// Code to setup the TableLayoutPanel called overviewTableLayoutPanel
this.overviewTableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 809F));
this.overviewTableLayoutPanel.Location = new System.Drawing.Point(7, 10);
this.overviewTableLayoutPanel.Margin = new System.Windows.Forms.Padding(4);
this.overviewTableLayoutPanel.Name = "overviewTableLayoutPanel";
this.overviewTableLayoutPanel.Size = new System.Drawing.Size(809, 390);
this.overviewTableLayoutPanel.TabIndex = 0;
this.overviewTableLayoutPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.overviewTableLayoutPanel_Paint);

// Code to loop over rows and add buttons and add onClick handlers.
for(int rowNumber = 1; rowNumber++, rowNumber < 10)
{
  Button b_batterygraph = new Button();
  b_batterygraph.Text = "View Graph";
  b_batterygraph.Click += new System.EventHandler(this.graphButton_Click);
  // some code to layout buttons
  overviewTableLayoutPanel.Controls.Add(l_batterygraph, 4, rowNumber);
  overviewTableLayoutPanel.Click += new System.EventHandler(this.table_Click);
}

// OnClick handler Buttons
private void graphButton_Click(object sender, EventArgs e)
{
  MessageBox.Show("Button clicked");
}

// OnClick handler TableLayoutPanel
private void table_Click(object sender, EventArgs e)
{
  MessageBox.Show("Table clicked");
}

При нажатии на кнопку я ожидаю, что на выходе будет обработчик события кнопки, по которой срабатывает onClick. Однако фактический вывод заключается в том, что обработчик события onClick в TableLayoutPanel сработал.

...