Добавить события в динамически добавленные кнопки в Winform - PullRequest
0 голосов
/ 17 сентября 2018

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

private void GetButtonDynamically()
    {
        SqlConnection conn = GetConnection();
        conn.Open();
        using (conn)
        {
            SqlCommand cmd = new SqlCommand("Select MenuName from tblMainMenu",conn);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {

                    Button mybutton = new Button();
                    mybutton.Location = new Point(x, y + 54);
                    y += 54;
                    mybutton.Height = 44;
                    mybutton.Width = 231;

                    mybutton.BackColor = Color.Gainsboro;
                    mybutton.ForeColor = Color.Black;

                    mybutton.Text = reader["MenuName"].ToString();
                    mybutton.Name = reader["MenuName"].ToString();
                    mybutton.Font = new Font("Georgia", 12);

                    Controls.Add(mybutton);
                    mybutton.Click+= new EventHandler(mybutton_Click);

            }
            conn.Close();
        }
    }

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

Событие Click Click

 private void mybutton_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Button is Clicked");
    }

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете добавить «AccessibleName» для своей кнопки при ее создании.В вашем случае, внутри вашего цикла while, получите доступное имя в событии нажатия кнопки и примените случай переключателя или цикл, чтобы выделить его.Пример кода

int x = 10; int y = 10;
        for (int i = 1; i < 5; i++)
        {
            Button mybutton = new Button();
            mybutton.Location = new Point(x, y + 54);
            y += 54;
            mybutton.Height = 44;
            mybutton.Width = 231;
            mybutton.BackColor = Color.Gainsboro;
            mybutton.ForeColor = Color.Black;
            mybutton.Text = i + "MenuName".ToString();
            mybutton.Name = i + "MenuName".ToString();
            mybutton.AccessibleName = i.ToString();
            mybutton.Font = new Font("Georgia", 12);
            Controls.Add(mybutton);
            mybutton.Click += new EventHandler(mybutton_Click);
        }

При нажатии кнопки изменить, как это

        private void mybutton_Click(object sender, EventArgs e)
        {
          Button cb = (Button)sender;
          string strName = cb.AccessibleName;
          switch (strName)
          {
            case "1":
                MessageBox.Show("Button 1 is Clicked");
                break;
            case "2":
                MessageBox.Show("Button 2 is Clicked");
                break;
            case "3":
                MessageBox.Show("Button 3 is Clicked");
                break;
            default:
                break;
         }
       }
0 голосов
/ 17 сентября 2018

Я думаю, что это может помочь вам:

private void Form1_Load(object sender, EventArgs e)
            {
                int y = 0;
                for (int i = 0; i < 10; i++)
                {

                    Button mybutton = new Button();
                    mybutton.Location = new Point(0, y + 10);
                    y += 54;
                    mybutton.Height = 44;
                    mybutton.Width = 231;

                    mybutton.BackColor = Color.Gainsboro;
                    mybutton.ForeColor = Color.Black;

                    mybutton.Text = "a "+i.ToString();
                    mybutton.Name = "b" + i.ToString();
                    mybutton.Font = new Font("Georgia", 12);

                    switch (i)// define your condition
                    {
                        case 1:
                            mybutton.Click += new EventHandler(mybutton_Click);
                            break;
                        case 2:
                            mybutton.Click += new EventHandler(mybutton_1_Click);
                            break;
                        default:
                            break;
                    }

                    Controls.Add(mybutton);
                }
            }
            private void mybutton_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Button 1 is Clicked");
            }
            private void mybutton_1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Button 2 is Clicked");
            }
...