2013-04-18 9 views
17

O ile mi wiadomo, są to jedyne klawisze, które reagują, gdy przycisk ma fokus.Dlaczego klawisze Enter i spacja zachowują się inaczej w przypadku przycisków?

Naciśnięcie Wpisz " natychmiast" kliknie "przycisk, nawet jeśli trzymasz go wciśnięty. (A więc "kliknięcie" dzieje się na KeyDown).

Naciśnięcie klawisza Przestrzeń działa bardziej jak zwykłe kliknięcie myszą; Przytrzymanie go nie aktywuje zdarzenia Click, ale ma miejsce po jego zwolnieniu. (Tak więc kliknięcie odbywa się w KeyUp lub KeyPressed).

Dlaczego różnica? Chciałbym dobry artykuł na ten temat lub po prostu logiczne wyjaśnienie, dlaczego te dwa klucze mają inne zachowanie. Z pewnością jest tam wyjaśnienie!

+0

Enter jest do zaakceptowania, Esc jest do odrzucenia, Spacja służy do naciśnięcia przycisku skupienia. Więc jeśli domyślny przycisk jest OK, po naciśnięciu klawisza Enter faktycznie akceptujesz zmiany i nie naciskasz przycisku. – Aristos

+0

To jest fałsz w przypadku "MessageBox". Enter i spacja - kliknij przycisk skupienia, ale z zachowaniem opisanym powyżej. – Felix

+0

W oknie komunikatu przycisk OK ma fokus, więc tak jak mówię. Ten, który ma fokus, otrzymuje spację jako kliknięcie, Enter przyjmuje pole komunikatu, esc odrzuca je i zamyka. – Aristos

Odpowiedz

5

Nie mogę znaleźć artykułów wyjaśniających to i jest to naprawdę dobre pytanie. Osobiście uważam, że jest to dla celów funkcjonalności

klawisz Enter klasyczne AcceptButton działa jak FullClick (kliknij/ClickReleased), dlatego jeśli trzymać go trzeba będzie efekt klikając wielokrotnie.

Przestrzeń jednak jest SingleClick (Nie kliknięcie uwalnianie do momentu zwolnienia klawisza), dzięki czemu można go wykonać zadanie gdzie tylko Click jest wymagane bez ClickRelease i działań, w których wymagany jest tylko wybór kontroli, aby go uaktywnić. Podobnie jak CheckBox lub RadioButtons, które nie mogą być aktywowane za pomocą Enter, ale można je aktywować za pomocą Przestrzeni, jak po kliknięciu.

Podsumowując, Przestrzeń byłaby oficjalna MouseClick ponieważ ma takie same skutki MouseClick uppon naciśnięciu lub zwolnieniu. Wpisz jako rodzaj skrótu do Kliknij jednym kliknięciem. Wszystko oczywiście w idei nadania większej ilości możliwości samej klawiaturze.

3

Widzisz dwa różne zachowania, które nie są powiązane, z tą różnicą, że dotyczą one zdarzeń na klawiaturze w winFormie.

Wpisz jest specjalny, ponieważ jest to naciśnięcie klawisza, aby aktywować acceptButton formularza. W rzeczywistości przegapiłeś inny klucz, który może wpływać na przyciski: Esc to cancelButton, a także będzie wyświetlać zdarzenia.

Jak wyjaśniono PhaDaPhunk, Przestrzeń jest MouseClick dla każdego składnika, który akceptuje MouseClick, ale nie znalazłem szczegółowe wyjaśnienie dla niego. Zakładam, że jest to domyślne zachowanie wszystkich kontrolek. Microsoft przypomnienie accessibility wydaje się sugerować, że jest tak w swoim dziale na klawiatury oparte na nawigacji

Nawiasem mówiąc, ten Microsoft support knowledge base entry wydaje się wskazywać, że realizacja spacji poszło z Button.Click do Button.MouseClick. Być może to jest powód, dla którego jest to inne zachowanie.

+0

Czy jest możliwe, że w przypadku MessageBox za pomocą tylko przycisku "OK", esc aktywuje prawy górny znak X? (Nie wiem, jak sformatować klawisze klawiatury) – Felix

+0

Klawisze ponownego formatowania, dowiedziałem się, jak to zrobić, edytując swój wpis, a następnie anulując. Najwyraźniej jest to Klucz. Jeśli chodzi o twoje pytanie, wydaje się to słuszne, ale musiałbym zajrzeć jeszcze dalej. Formularz ma ustawialne pole dla cancelButton. –

+0

Ktoś zmienił to dla mnie:/ – Felix

Powiązane problemy