Udostępnij za pośrednictwem


Omówienie zdarzeń (Windows Forms .NET)

Zdarzenie to akcja, na którą można odpowiedzieć lub "obsłużyć" w kodzie. Zdarzenia mogą być generowane przez akcję użytkownika, taką jak kliknięcie myszy lub naciśnięcie, 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 obsłuży Click zdarzenie. Jeśli użytkownik kliknie formularz, zostanie wykonany kod w procedurze obsługi zdarzeń formularza Click .

Uwaga

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

Aby uzyskać informacje na temat sposobu zgłaszania i korzystania z 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ń. Delegaci w przybliżeniu są równi do wskaźników funkcji, często używanych w języku Visual C++ i innych językach zorientowanych na obiekty. 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 powiązania zdarzeń z metodami używanymi 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 metodę ograniczenia. Aby uzyskać więcej informacji na temat definiowania delegatów, zobacz Obsługa i zgłaszanie zdarzeń.

Delegaty mogą być powiązane z jedną metodą lub z wieloma metodami, nazywanymi multiemisji. 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óre nie będzie logicznie powtarzać wiele razy na zdarzenie. Aby uzyskać informacje o sposobie tworzenia delegata multiemisji, zobacz How to combine delegates (Multicast Delegates) (Jak łączyć delegaty multiemisji).

Delegat multiemisji utrzymuje listę wywołań metod, z którymi jest powiązana. Delegat multiemisji obsługuje metodę Combine dodawania metody do listy wywołań i Remove metody w celu jej usunięcia.

Gdy zdarzenie jest rejestrowane przez aplikację, kontrolka zgłasza zdarzenie przez wywołanie delegata dla tego zdarzenia. Delegat z kolei wywołuje metodę powiązana. W najbardziej typowym przypadku (delegat multiemisji) delegat wywołuje każdą powiązaną metodę na liście wywołań z kolei, co zapewnia powiadomienie jeden do wielu. Ta strategia oznacza, że kontrolka nie musi obsługiwać listy obiektów docelowych dla powiadomień o zdarzeniach — delegat obsługuje wszystkie rejestracje i powiadomienia.

Delegaci umożliwiają również powiązanie wielu zdarzeń z tą samą metodą, co umożliwia powiadomienie wiele do jednego. Na przykład zdarzenie kliknięcia przycisku i zdarzenie menu-command-click może wywołać ten sam delegat, który następnie wywołuje jedną metodę do obsługi tych oddzielnych zdarzeń w taki sam sposób.

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ż