Posso ritardo legarsi ai gestori di eventi in C #?
-
22-08-2019 - |
Domanda
Sono la creazione di oggetti in modo dinamico e inserendoli in una tabella HTML, gli oggetti sono o etichette o linkbuttons, se sono linkbuttons ho bisogno di sottoscrivere un EventHandler per l'evento click, ma sto lottando per trovare un modo per in realtà aggiungere il gestore. Il codice finora è:
WebControl myControl;
if _createLabel)
{
myControl = new Label();
}
else
{
myControl = new LinkButton();
}
myControl.ID = "someID";
myControl.GetType().InvokeMember("Text", BindingFlags.SetProperty, null, myControl, new object[] { "some text" });
if (!_createLabel)
{
// somehow do myControl.Click += myControlHandler; here
}
Soluzione
Una cosa del genere funzionerà.
myControl . < a href = "http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx" rel = "nofollow noreferrer"> GetType () GetEvent ( "click") addEventHandler (myControl, myControlHandler) ;
Altri suggerimenti
Di seguito funzionerà:
LinkButton lnk = myControl as LinkButton;
if (lnk != null)
{
lnk.Click += myControlHandler;
}
Questo dimostra vincolante un evento in un controllo (per nome) a un metodo dell'istanza corrente (per nome):
Button btn = new Button();
EventInfo evt = btn.GetType().GetEvent("Click");
MethodInfo handler = GetType().GetMethod("SomeHandler",
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
evt.AddEventHandler(btn, Delegate.CreateDelegate(
evt.EventHandlerType, this, handler));
Si può semplicemente fare:
Control.Event + = new EventHandlerType (this.controlClick);