Formularze systemu Windows — przegląd zdarzeń
Zdarzenie jest akcją, 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 klawisza; według kodu programu; lub przez system.
Aplikacje sterowane zdarzeniami wykonują kod w odpowiedzi na zdarzenie. Każdy formularz i kontrolka uwidaczniają wstępnie zdefiniowany zestaw zdarzeń, dla których można programować. Jeśli wystąpi jedno z tych zdarzeń i istnieje kod w skojarzonej procedurze 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 MouseDownzdarzenia występują zdarzenia , MouseUpi .Click
Aby uzyskać informacje o sposobie zgłaszania i korzystania z zdarzenia, zobacz Zdarzenia.
Delegaci i ich rola
Delegaty to klasy powszechnie używane w .NET Framework do tworzenia mechanizmów obsługi zdarzeń. Delegaty w przybliżeniu utożsamiają się ze wskaźnikami funkcji, często używanymi w języku Visual C++ i innych językach zorientowanych na obiekty. W przeciwieństwie do wskaźników funkcji delegaci są jednak obiektowymi, bezpiecznymi i bezpiecznymi typami. 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 jednej lub kilku metod 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 w celu powiadomienia o zdarzeniach przez określenie metody obsługi. Po wystąpieniu zdarzenia delegat wywołuje metodę powiązana. Aby uzyskać więcej informacji na temat definiowania delegatów, zobacz Zdarzenia.
Delegaci mogą być powiązani z jedną metodą lub z wieloma metodami, nazywanymi multiemisji. Podczas tworzenia delegata dla zdarzenia (lub Windows) zwykle tworzysz zdarzenie multiemisji. Rzadkim wyjątkiem może być zdarzenie, które powoduje wystąpienie określonej procedury (na przykład wyświetlenie okna dialogowego), które nie powtarzałoby się logicznie wiele razy na zdarzenie. Aby uzyskać informacje na temat tworzenia delegata multiemisji, zobacz Jak połączyć delegatów (delegatów 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, która zapewnia powiadomienie jeden do wielu. Ta strategia oznacza, że kontrolka nie musi obsługiwać listy obiektów docelowych dla powiadomienia 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ć tego samego delegata, który następnie wywołuje pojedynczą 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ć procedurę obsługi zdarzeń do kontrolki.