Översikt över händelser (Windows Forms .NET)
En händelse är en åtgärd som du kan svara på eller "hantera" i kod. Händelser kan genereras av en användaråtgärd, till exempel genom att klicka med musen eller trycka på en nyckel, 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 programmera mot. Om en av dessa händelser inträffar och det finns kod för en associerad händelsehanterare anropas den koden.
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 hanterar till exempel en Click händelse. Om en användare klickar på ett formulär körs kod i formulärets Click händelsehanterare.
Not
Många händelser inträffar tillsammans med andra händelser. Under den DoubleClick händelse som inträffar inträffar till exempel MouseDown, MouseUpoch Click händelser.
Information om hur du genererar och använder en händelse finns i Hantera och höja händelser.
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, som ofta används 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 delegeringen den kopplade 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 multicast-delegat finns i Så kombinerar du delegater (Multicast Delegates).
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 menykommando-klickhändelse båda anropa samma delegerad, som sedan kallar på en enda metod för att hantera dessa separata händelser på samma sätt.
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.
Se även
.NET Desktop feedback