Dela via


Översikt över händelser

En händelse är en åtgärd som du kan svara på eller "hantera" i kod. Händelser genereras vanligtvis av en användaråtgärd, till exempel genom att klicka med musen eller trycka på en nyckel, men de kan också genereras av programkod eller av systemet.

Händelsedrivna program kör kod som svar på en händelse. Varje formulär och kontroll exponerar en fördefinierad uppsättning händelser som du kan svara på. Om en av dessa händelser aktiveras och det finns en associerad händelsehanterare anropas hanteraren och kod körs.

De typer av händelser som genereras av ett objekt varierar, men många typer är gemensamma för de flesta kontroller. De flesta objekt har till exempel en Click händelse som aktiveras när en användare klickar på den.

Anmärkning

Många händelser inträffar med andra händelser. Under den DoubleClick händelse som inträffar inträffar till exempel MouseDown, MouseUpoch Click händelser.

Allmän information om hur du genererar och använder en händelse finns i Hantera och höja händelser i .NET.

Ombud och deras roll

Ombud är klasser som ofta används i .NET för att skapa mekanismer för händelsehantering. Delegater motsvarar ungefär funktionspekare och används ofta i Visual C++ och andra objektorienterade språk. Till skillnad från funktionspekare är dock delegeringar objektorienterade, typsäkra och säkra. Också, där en funktionspekare endast innehåller en referens till en viss funktion, består en delegat av en referens till ett objekt och referenser till en eller flera metoder inom objektet.

Den här händelsemodellen använder ombud för att binda händelser till de metoder som används för att hantera dem. Ombudet gör det möjligt för andra klasser att registrera sig för händelsemeddelanden genom att ange en hanteringsmetod. När händelsen inträffar, anropar delegaten den bundna metoden. Mer information om hur du definierar delegater finns i Hantering och upphöjning av händelser.

Delegater kan bindas till en enda metod eller till flera metoder, vilket kallas för multikastning. När du skapar ett ombud för en händelse skapar du vanligtvis en multicast-händelse. Ett sällsynt undantag kan vara en händelse som resulterar i en specifik procedur (till exempel att visa en dialogruta) som inte logiskt skulle upprepas flera gånger per händelse. Information om hur du skapar en multicastdelegering finns i Hur man kombinerar delegeringar (Multicastdelegeringar).

En multicast-delegat upprätthåller en anropslista över de metoder som den är bunden till. Multicast-ombudet stöder en Combine metod för att lägga till en metod i anropslistan, och en Remove metod för att ta bort den.

När en händelse registreras av programmet genererar kontrollen händelsen genom att anropa ombudet för händelsen. Ombudet anropar i sin tur den bundna metoden. I det vanligaste fallet (ett multicast-ombud) anropar ombudet varje bunden metod i anropslistan i sin tur, vilket ger ett en-till-många-meddelande. Den här strategin innebär att kontrollen inte behöver underhålla en lista över målobjekt för händelsemeddelanden – ombudet hanterar all registrering och alla meddelanden.

Delegater gör också att flera händelser kan bindas till samma metod, vilket tillåter en många-till-en-notifiering. Till exempel kan en knappklickshändelse och en menykommandoklickshändelse både anropa samma delegat, som sedan anropar en gemensam metod för att hantera dessa händelser likadant.

Bindningsmekanismen som används med ombud är dynamisk: ett ombud kan under körning bindas till vilken metod som helst vars signatur matchar den för händelsehanteraren. Med den här funktionen kan du konfigurera eller ändra den bundna metoden beroende på ett villkor och dynamiskt koppla en händelsehanterare till en kontroll.

Händelser i Windows-formulär

Händelser i Windows Forms deklareras med delegeringen EventHandler<TEventArgs> för hanteringsmetoder. Varje händelsehanterare innehåller två parametrar som gör att du kan hantera händelsen korrekt. I följande exempel visas en händelsehanterare för en Button-kontrolls Click-event.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

Den första parametern,sender, innehåller en referens till objektet som skapade händelsen. Den andra parametern, e, skickar ett objekt som är specifikt för händelsen som hanteras. Genom att referera till objektets egenskaper (och ibland dess metoder) kan du hämta information, till exempel musplatsen för mushändelser eller data som överförs i dra och släpp-händelser.

Vanligtvis genererar varje händelse en händelsehanterare med en annan händelseobjekttyp för den andra parametern. Vissa händelsehanterare, till exempel de för MouseDown och MouseUp händelser, har samma objekttyp för sin andra parameter. För dessa typer av händelser kan du använda samma händelsehanterare för att hantera båda händelserna.

Du kan också använda samma händelsehanterare för att hantera samma händelse för olika kontroller. Om du till exempel har en grupp RadioButton kontroller i ett formulär kan du skapa en enskild händelsehanterare för händelsen för Click varje RadioButton. Mer information finns i Hantera en kontrollhändelse.