Как сделать кнопку динамически?

Я делаю "список" кнопок, как меню в форме, и я пытаюсь сделать это из таблицы в базе данных, я делаю это так:

foreach (Catalogos catalogo in catalogos)
{
    SimpleButton sb = new SimpleButton();
    sb.Text = catalogo.Nombre;
    sb.Click += catalogo.Evento;
    LayoutControlItem item = new LayoutControlItem();
    item.TextVisible = false;
    item.Control = sb;
    lcg.Add(item);
 }

Моя проблема в sb.Click += catalogo.Evento линия, как я могу сделать событие динамически

2 ответа

Решение

Используйте лямбда / анонимный метод

SimpleButton sb = new SimpleButton();
sb.Text = catalogo.Nombre;
sb.Click += (sender, evntArgs) => {
    //some dynamic mouse click handler here.
};

Опция 1

Создать SimpleButton_Click метод в вашей форме

private void SimpleButton_Click(object sender, EventArgs e)
{
    //using (SimpleButton)sender you can find which botton is clicked
}

затем в вашем цикле назначьте этот метод Click событие:

sb.Click += new System.EventHandler(this.SimpleButton_Click);

вариант 2

назначьте делегат / лямбда-выражение для события следующим образом:

//instead of sender and e, usually you should use different names
//because usually you are running this code in an event handler
//that has sender and e parameters itself
sb.Click += (object senderObject, EventArgs eventArgs) => 
{
   //using (SimpleButton)sender you can find which botton is clicked
};
Другие вопросы по тегам