2015-09-11 3 views
0

Я делаю «список» кнопки, как меню в форме, и я пытаюсь сделать это из таблицы в базе данных, я делаю это так:Как сделать кнопку динамически?

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 линии, как я могу сделать Eventy динамически

+0

В чем проблема? Вы должны иметь возможность установить обработчик события клика, если 'Evento' имеет правильную подпись. –

+0

Какой тип Evento (Catalogo.Evento)? De qué tipo es la propiedad Evento (Catalogo.Evento)? – AiApaec

+0

Я даю ему строку, я знаю, что это должен быть EventHandler или что-то в этом роде, но как я могу сохранить это на BD? Btw, я пытаюсь ответить. – Thorin

ответ

3

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

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

вариант 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 
}; 
+0

@caesay Я думаю, что это добавляет некоторую ценность :) и вот +1 для вас, чтобы не думать плохо :) –