Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zdarzenie to akcja, na którą można odpowiedzieć lub "zarządzać" w kodzie. Zdarzenia są zwykle generowane przez akcję użytkownika, taką jak kliknięcie myszy lub naciśnięcie, ale mogą być również generowane przez kod programu lub przez system.
Aplikacje sterowane zdarzeniami uruchamiają kod w odpowiedzi na zdarzenie. Każdy formularz i kontrolka uwidacznia wstępnie zdefiniowany zestaw zdarzeń, na które można reagować. Jeśli zostanie zgłoszone jedno z tych zdarzeń i istnieje skojarzona procedura obsługi zdarzeń, procedura obsługi jest wywoływana i kod zostaje uruchomiony.
Typy zdarzeń zgłaszanych przez obiekt różnią się, ale wiele typów jest typowych dla większości kontrolek. Na przykład większość obiektów ma Click zdarzenie, które jest wywoływane po kliknięciu obiektu przez użytkownika.
Uwaga / Notatka
Wiele zdarzeń występuje z innymi zdarzeniami. Na przykład w trakcie wystąpienia zdarzenia DoubleClick wystąpią zdarzenia MouseDown, MouseUpi Click.
Aby uzyskać ogólne informacje na temat sposobu zgłaszania i korzystania ze zdarzenia, zobacz Obsługa i wywoływanie zdarzeń na platformie .NET.
Delegaci i ich rola
Delegaty to klasy często używane na platformie .NET do tworzenia mechanizmów obsługi zdarzeń. Delegaty w przybliżeniu odpowiadają wskaźnikom do funkcji, które są często używane w języku Visual C++ i innych językach zorientowanych obiektowo. W przeciwieństwie do wskaźników funkcji, delegaty są jednak zorientowane obiektowo, bezpieczne typowo i zabezpieczone. Ponadto, gdy wskaźnik funkcji zawiera tylko odwołanie do określonej funkcji, delegat składa się z odwołania do obiektu i odwołuje się do co najmniej jednej metody w obiekcie.
Ten model zdarzeń używa delegatów do przypisywania zdarzeń metodom, które służą do ich obsługi. Delegat umożliwia innym klasom rejestrowanie powiadomień o zdarzeniach przez określenie metody obsługi. Gdy wystąpi zdarzenie, delegat wywołuje związaną metodę. Aby uzyskać więcej informacji na temat definiowania delegatów, zobacz Jak obsługiwać i zgłaszać zdarzenia.
Delegaty mogą być powiązane z jedną metodą lub z wieloma metodami, co nazywa się multicastowaniem. Podczas tworzenia delegata dla zdarzenia zazwyczaj tworzone jest zdarzenie multiemisji. Rzadkim wyjątkiem może być zdarzenie, które powoduje określoną procedurę (na przykład wyświetlenie okna dialogowego), która nie będzie logicznie powtarzana wielokrotnie dla jednego zdarzenia. Aby uzyskać informacje o tym, jak tworzyć delegaty multicast, zobacz Jak połączyć delegaty (Multicast Delegates).
Delegat multiemisji utrzymuje listę wywołań metod, z którymi jest powiązana. Delegat multiemisji obsługuje metodę Combine, aby dodać metodę do listy wywołań i metodę Remove, aby ją usunąć.
Kiedy aplikacja rejestruje zdarzenie, kontrolka zgłasza je, wywołując delegata odpowiedzialnego za to zdarzenie. Delegat z kolei wywołuje metodę powiązaną. W najbardziej typowym przypadku (delegat typu multicast), delegat wywołuje kolejno każdą powiązaną metodę z listy wywołań, co zapewnia powiadomienie jeden do wielu. Ta strategia oznacza, że kontrolka nie musi prowadzić listy obiektów docelowych, aby powiadamiać o zdarzeniach — delegat obsługuje całą rejestrację i powiadomienia.
Delegaty umożliwiają również powiązanie wielu zdarzeń z tą samą metodą, co pozwala na powiadomienie w systemie wiele-do-jednego. Na przykład zdarzenie kliknięcia przycisku i kliknięcie polecenia w menu mogą wywołać tego samego delegata, który następnie uruchamia pojedynczą metodę do jednolitej obsługi tych różnych zdarzeń.
Mechanizm powiązania używany z delegatami jest dynamiczny: delegat może być powiązany w czasie wykonywania z dowolną metodą, której podpis jest zgodny z procedurą obsługi zdarzeń. Dzięki tej funkcji można skonfigurować lub zmienić metodę powiązaną w zależności od warunku i dynamicznie dołączyć program obsługi zdarzeń do kontrolki.
Zdarzenia w formularzach systemu Windows
Zdarzenia w formularzach systemu Windows są deklarowane za pomocą delegata EventHandler<TEventArgs> dla metod obsługi. Każda procedura obsługi zdarzeń udostępnia dwa parametry, które umożliwiają prawidłowe obsługę zdarzenia. W poniższym przykładzie przedstawiono obsługę zdarzenia Button kontrolki Click.
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)
{
}
Pierwszy parametr,sender
, zawiera odwołanie do obiektu, który wzbudził zdarzenie. Drugi parametr , e
przekazuje obiekt specyficzny dla obsługiwanego zdarzenia. Odwołując się do właściwości obiektu (a czasami jego metod), można uzyskać informacje, takie jak lokalizacja kursora podczas zdarzeń związanych z myszą lub dane przesyłane w zdarzeniach przeciągnij i upuść.
Zazwyczaj każde zdarzenie tworzy procedurę obsługi zdarzeń z innym typem obiektu zdarzenia dla drugiego parametru. Niektóre programy obsługi zdarzeń, takie jak te dla zdarzeń MouseDown i MouseUp, mają ten sam typ obiektu dla drugiego parametru. W przypadku tych typów zdarzeń można użyć tej samej procedury obsługi zdarzeń do obsługi obu zdarzeń.
Można również użyć tej samej procedury obsługi zdarzeń, aby obsłużyć to samo zdarzenie dla różnych kontrolek. Jeśli na przykład masz grupę RadioButton kontrolek w formularzu, możesz utworzyć pojedynczą obsługę zdarzenia dla Click zdarzenia każdego RadioButton
. Aby uzyskać więcej informacji, zobacz Jak obsługiwać zdarzenie sterujące.
Treści powiązane
.NET Desktop feedback