søndag den 19. maj 2013

Hændelser

De foregående indlæg har behandlet delegates, der er grundlaget for hændelser eller events.I det følgende forklares events udfra hvad der sker ved tryk på en knap.

En knap, en checkboks og andre elementer i brugerfladen i .NET er i virkeligheden klasser. Disse klasser indeholder strukturer der hedder events.

Det er ikke knappens klasse der bestemmer hvad der skal ske når der f.eks trykkes på knappen. Eventen giver blot besked til metoden / metoderne der "lytter" om at handlingen er foretaget. Det er så den lyttende kode der bestemmer hvilke metoder der skal kaldes. Lyttende metoder siges også at abonnere på hændelsen.

Man taler om Subscriber og Broadcaster.

Subscriber - Lyttende kode
I praksis laver man i den kaldende kode en metode, og lader denne metode abonnere på en event.

Man abonnerer på eventen som vi så i indlæg om delegates ved at bruge += operatoren på delegaten. Hermed knytter man i afviklingsøjeblikket de metoder der skal afvikles ved hændelsen.

Broadcaster - Knappen
Knappen bestemmer hvornår hændelsen skal ske, ved at kalde delegaten. Man definerer en hændelse med event ordet. Events er en hjælpe funktionalitet i C# En event har en type og et navn. Eventen defineres i knappens klasse.

Typen er en delegate, som vi selv definerer, eller man kan anvende C#'s  indbygget delegate der hedder EventHandler. EventHandler har to argumenterne (object sender, EventArgs e).

Eventen defineres som sagt i knappens klasse, knappens objekt sendes sammen med argumentet e til den metode / metoder der skal foretage sig noget.

Koden der afvikles
Koden der afvikles ligger typisk udenfor selve knappen. Ser vi i  visual studio på en typisk signatur til en metode der bliver afviklet når der klikkes på en knap, kan den se således ud:

 protected void Button1_Click(object sender, EventArgs e)

Visual Studio laver netop en event med typen EventHandler delegate automatisk. Argumenterne er det objekt der har udløst eventen sender(knappen), samt eventuelle argumenter i et EventArgs objekt e.

Ingen kommentarer:

Send en kommentar