Blog Home  Home Feed your aggregator (RSS 2.0)  
artiso Blog - Events in ascx-UserControls
Neues rund um's Thema .Net
 
 Wednesday, November 28, 2007

Events in eigene WebUserControls (.ascx) einzubauen ist im Prinzip ganz einfach:

   1: public event ClickEventHandler Clicked;
   2: public delegate void ClickEventHandler(object sender, EventArgs e);
   3: protected virtual void OnClicked(EventArgs e)
   4: {
   5:     if (Clicked != null)
   6:         Clicked(this, e);
   7: }


Man deviniert ein Event mit einem Eventhandler-Typ (Zeile1), definiert einen Delegaten für den Eventhandler (Zeile 2) und kann dann eine Methode definieren, die den Event auslöst. Diese Methode ruft man dann auf, wenn das Event ausgelöst werden soll.

Wenn man das UserControl in eine Seite einbaut kann man jetzt im CodeBehind ganz einfach einen Eventhandler auf den Event registrieren und fertig:

this.ucButton.Clicked += new ClickEventHandler(ucButton_Clicked);


Auch im Markup kann man den Event angeben, vorausgesetzt man hat den entsprechenden Eventhandler angelegt.

<uc3:ucButton ID="ucButton" runat="server" Text="Gross" ImageURL="~/Images/Status/GreenBox.png" OnClicked="ucButton_Clicked" />

Was bei mir aber nicht funktioniert, ist der Designtime-Support. Bei anderen Controls kann ich die Events im Property-Grid sehen und ich kann per Doppelclick auch einen Standard-Eventhandler einrichten und registrieren. Das geht bei mir nicht. Hat jemand dafür eine Lösung? Wenn ja, dann bitte her damit.
Wednesday, November 28, 2007 4:04:12 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [4]    | 
Wednesday, November 28, 2007 5:25:18 PM (Mitteleuropäische Zeit, UTC+01:00)
Das geht nicht:
http://www.velocityreviews.com/forums/t122586-custom-event-in-designtime-events-tab-for-a-web-user-control.html
Wednesday, November 28, 2007 5:55:24 PM (Mitteleuropäische Zeit, UTC+01:00)
Schade. Hatte auch schon an ein paar Stellen gelesen, dass es hier wohl Einschränkungen gibt, aber in diesem Post wird es ganz klar gesagt. Hatte gehofft, dass da VS2008 vielleicht eine Verbesserung bringt, aber offensichtlich nicht.
Thursday, November 29, 2007 3:32:01 PM (Mitteleuropäische Zeit, UTC+01:00)
Ich habe noch einen Zusatz zum Beispielcode - die eigentliche Frage wurde ja schon beantwortet.

Es gibt eigentlich keinen Sinn, sich einen EventHandler anzulegen (in diesem Fall ClickEventHandler), der nichts anderes macht, als der System.EventHandler.

Das bedeutet, den obrigen Code kann man ausdünnen.
Zeile 1: Anstelle von ClickEventHandler kommt EventHandler
Zeile 2: wird gelöscht

Sich einen eigenen EventHandler zu definieren macht nur Sinn, wenn dieser noch nicht existiert, z.B:
public delegate void DemoEventHandler(int _para1, string _para2, List<cMyObject> _para3);
public event DemoEventHandler CustomEvent;

if (CustomEvent != null)
{
CustomEvent(1, "demo", new List<cMyObject>());
}
Stefan
Thursday, November 29, 2007 3:35:18 PM (Mitteleuropäische Zeit, UTC+01:00)
Das ist vollkommen richtig. Ich hatte das in meinem Beispiel einen anderen Eventhandler und habe das für den Blog-Beitrag nur vereinfacht - aber ich hätte es noch weiter vereinfachen können. Danke für das Feedback.
All comments require the approval of the site owner before being displayed.
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Copyright © 2008 Thomas. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: