Zauważam, że WinForm ma wiele metod, które przetwarzają komendy lub klucze (Process*()
) i (pre) filtrują wiadomości systemowe, ale ich cele nie są dla mnie jasne.Jaki jest cel wszystkich metod Process * i wszystkich filtrów wiadomości?
Oficjalna dokumentacja jest nieco niejasna i nie znalazłem żadnej jasnej i kompletnej odpowiedzi.
mówię o następujących metod:
PreFilterMessage(ref Message m)
ProcessCmdKey(ref Message msg, Keys keyData)
WndProc(ref Message m)
ProcessDialogKey(Keys keyData)
PreProcessMessage(ref Message msg)
ProcessKeyMessage(ref Message m)
ProcessKeyPreview(ref Message m)
Niektóre są dla kluczy odcięta (jak ProcessCmdKey
lub ProcessDialogKey
), a niektóre wiadomości odcięta (nawzajem). Ale dlaczego tyle metod? Jakie są ich cele i zastosowania?
Przypuszczam, że kolejność wykonywania dla każdej metody jest inna.
Oto, co wiem (a myślę, wiem):
PreFilterMessage
: najpierw przechwycić wiadomości. Możesz zatrzymać dystrybucję wiadomości dla wszystkich poniższych metod tutaj!ProcessCmdKey
: przechwytuje WSZYSTKIE klucze, a nawet kombinacje, klucze specjalne i polecenia. Dobrze wykrywa kluczowe skróty w całym formularzu (np. Ctrl + D). Możesz zatrzymać dystrybucję kluczy tutaj.WndProc
: sekundować przechwytywanie wiadomości po filtrowaniu? Używam go tylko do wykrycia, czy użytkownik kliknął w prawym górnym rogu "X", ale przypuszczam, że jest to możliwe na innej metodzie!ProcessDialogKey
: przechwytuje JEDEN klucz tylko, prawdopodobnie poProcessCmdKey
i przed wszystkimi zdarzeniami klawiszy kontrolek.PreProcessMessage
: przedWndProc
i poPreFilterMessage
? Nie wiem dokładnie, dlaczego jest używany.ProcessKeyMessage
: wiadomość kluczowa przechwytująca. Wydaje się, że jest rzadko używany.ProcessKeyPreview
: klucz przechwytywania przed zdarzeniem podglądu? Rzadko używane.
W głębi, myślę, że jest to prawidłowa kolejność wykonywania:
- filtr wstępny
- Filtr
- Preprocesuj
- Process
- Wydarzenia
Dlaczego tak wiele kroków?
Wszelkie informacje lub konkretne przypadki użycia zostaną docenione!
W skrócie, z wielu z tych samych powodów masz 'KeyDown',' KeyUp' i 'KeyPress' ... abyś mógł otrzymać wiadomość w momencie najbardziej zgodnym z twoim celem (celami). Na różnych etapach otrzymujesz różne informacje. – DonBoitnott