Udostępnij za pośrednictwem


Omówienie zdarzeń (Windows Forms .NET)

Zdarzenie to akcja, na którą można odpowiedzieć lub "zarządzać" w kodzie. Zdarzenia mogą być wynikiem akcji użytkownika, takiej jak kliknięcie myszy lub naciśnięcie klawisza, przez kod programu lub system.

Aplikacje sterowane zdarzeniami wykonują kod w odpowiedzi na zdarzenie. Każdy formularz i kontrolka uwidaczniają wstępnie zdefiniowany zestaw zdarzeń, względem których można programować. Jeśli wystąpi jedno z tych zdarzeń i istnieje kod skojarzonego programu obsługi zdarzeń, ten kod jest wywoływany.

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 będzie obsługiwać zdarzenie Click. Jeśli użytkownik kliknie formularz, zostanie wykonany kod w programie obsługi zdarzeń Click formularza.

Notatka

Wiele zdarzeń występuje w połączeniu z innymi zdarzeniami. Na przykład w trakcie wystąpienia zdarzenia DoubleClick wystąpią zdarzenia MouseDown, MouseUpi Click.

Aby uzyskać informacje na temat sposobu zgłaszania i korzystania ze zdarzenia, zobacz Obsługa i wywoływanie zdarzeń.

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 obiektami zorientowanymi, bezpiecznymi i bezpiecznymi. 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ę multicastem. 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 zdarzenie kliknięcia polecenia menu mogą wywołać tego samego delegata, który następnie wywołuje jedną metodę do obsługi tych osobnych zdarzeń w te same sposoby.

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.

Zobacz też