Hariprasad Kumbhar Ответов: 1

Как генерировать события click для кнопки создаются динамически в элемент управления flowlayoutpanel?


FlowLayoutPanel fp = new FlowLayoutPanel();
           fp.Size = new Size(180, 150);
           fp.Location = new Point(100, 140);
           fp.BackColor = Color.Aqua;

           this.Controls.Add(fp);
           for (int i = 0; i < 9; i++)
           {
               Button b1 = new Button();
               b1.Text = i.ToString();
               b1.Size = new Size(50, 40);
               fp.Controls.Add(b1);


Что я уже пробовал:

b1. Click+=new EventHandler(b1_click);

[no name]

Вы, кажется, забыли задать вопрос.

Hariprasad Kumbhar

На самом деле я хочу сгенерировать событие click для каждой кнопки, присутствующей в этой flowlayoutpanel

[no name]

И все же это не вопрос. Если это то, что вы хотите сделать, тогда идите и делайте это. Для этого вам не нужно наше разрешение.

1 Ответов

Рейтинг:
0

OriginalGriff

Код, который вы покажете, будет работать, чтобы добавить обработчик событий - хотя, возможно, вы можете использовать более простой синтаксис:

    Button b1 = new Button();
    b1.Text = i.ToString();
    b1.Size = new Size(50, 40);
    b1.Click += numberButton_Click;
    fp.Controls.Add(b1);
...
void numberButton_Click(object sender, EventArgs e)
    {
    ...
    }
В зависимости от используемой версии C#.
Это приведет к тому, что все кнопки будут совместно использовать обработчик событий, поэтому, вероятно, стоит установить свойство Tag в i вместо того, чтобы полагаться на свойство Text, чтобы идентифицировать их позже. (Таким образом, вы можете использовать красивые изображения позже, чтобы ваш калькулятор выглядел лучше, и ваш код не нужно менять).
Затем в вашем методе обработчика используйте тег напрямую:
void numberButton_Click(object sender, EventArgs e)
    {
    Button b = sender as Button;
    if (b != null)
        {
        int key = (int)b.Tag;
        // ...
        }
    }

Однако я бы предложил вам изменить условие завершения цикла: если только ваши пользователи не имеют ничего против '9'! :смеяться:
Наверное, так будет лучше:
for (int i = 0; i <= 9; i++)

Если вы хотите принудительно нажать на кнопку, как если бы пользователь нажал ее (а я не думаю, что вы это делаете), то используйте эту кнопку.Метод PerformClick.