Mam bardzo prostą aplikację Windows Forms. A w systemie Windows (lub przynajmniej w aplikacjach Windows Forms) po naciśnięciu klawisza Enter w jednowierszowej kontrolce TextBox usłyszysz dźwięk Ding. To nieprzyjemny dźwięk, który wskazywał, że nie można wprowadzić nowej linii, ponieważ jest to jednowierszowy TextBox.
To wszystko jest w porządku. Jednak w moim formularzu mam 1 pole tekstowe i przycisk wyszukiwania. Pozwalam użytkownikowi przeprowadzić wyszukiwanie, naciskając klawisz Enter po zakończeniu pisania, aby nie musiał używać myszy do klikania przycisku wyszukiwania.
Ale pojawia się ten dźwięk Ding. To jest bardzo irytujące.
Jak możemy sprawić, by dźwięk w ogóle nie był odtwarzany w mojej formie?
@David H - Oto jak wykrywam naciśnięcie klawisza Enter:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
źródło
Odpowiedzi:
Zapoznaj się z właściwością Form.AcceptButton . Możesz go użyć do określenia domyślnego przycisku dla formularza, w tym przypadku do naciśnięcia klawisza Enter.
Z dokumentów:
Istnieje również właściwość CancelButton, gdy użytkownik naciśnie klawisz Escape.
źródło
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Mi to pasuje:
SuppressKeyPress to prawdziwa sztuczka. Mam nadzieję, że to pomoże.
źródło
e.Handled = true;
był niewystarczający; to właśnieSuppressKeyPress
załatwiło sprawę .ToolStripTextBox.KeyDown
. Nie było innego rozwiązania. Dzięki!textbox
iKeyDown
wydarzeniuPróbować
źródło
Tab
pierwszy?Po prostu dodaj
e.SuppressKeyPress = true;
oświadczenie „jeśli”.źródło
Możesz użyć KeyPress zamiast KeyUp lub KeyDown, co jest bardziej wydajne i oto jak sobie z tym poradzić
i powiedz pokój „Ding”
źródło
KeyDown
, używame.Handled
ie.SuppressKeyPress
nie działało dla mnie - nadal dinging. Ale zmiana tego, jak zasugerowano tutaj, aby użyćKeyPress' event and
e.Handled` zrobiła to ładnie.Służy
SuppressKeyPress
do zatrzymywania dalszego przetwarzania naciśnięcia klawisza po jego obsłudze.źródło
Natknąłem się na ten post, próbując obsłużyć KeyDown, który zadziałał dla mnie.
Pomijanie naciśnięcia klawisza zatrzymuje wysyłanie zdarzenia do kontrolki podstawowej. Powinno to działać, jeśli ręcznie obsługujesz wszystko, co będzie robił klawisz Enter w tym polu tekstowym. Przepraszamy za Visual Basic.
źródło
Jest bardzo mała szansa, że ktokolwiek dostanie tę odpowiedź, ale inne odpowiedzi są naprawdę przerażające. Tłumienie wydarzenia przy
KeyDown
zabijaniu 2 dodatkowych wydarzeń w jednym uderzeniu. Ustawieniee.Handled
właściwości natrue
jest w tym kontekście bezużyteczne.Najlepszym sposobem jest ustawienie
Form.AcceptButton
właściwości na rzeczywisty przycisk wyszukiwania.Jest też inny sposób wykorzystania
Enter
klucza - niektórzy mogą chcieć, aby działał jakTAB
przycisk. Aby to zrobić, dodaj nowyButton
, ustaw jegoLocation
właściwość pozaForm
obszarem (tj.(-100, -100)
) - ustawienieVisible
właściwości nafalse
możeButton
w niektórych przypadkach wyłączyć moduły obsługi. UstawForm.AcceptButton
właściwość na nowy przycisk. W programieClick
obsługi zdarzeń dodaj następujący kodthis.SelectNextControl(ActiveControl, true, true, true, true)
Teraz możesz chcieć przenieść
focus
tylko wtedyfocus
, gdy jest włączonyTextBox
, możesz chcieć przetestowaćActiveControl
typ lub użyće.Supress
właściwości w programach obsługi zdarzeń kontrolek, które nie są przeznaczone do użycia,Enter
ponieważTAB
to wszystko. Nie musisz nawet biće.KeyCode
źródło
źródło
W WinForms klawisz Enter powoduje dźwięk Ding, ponieważ nie określono właściwości formularza AcceptButton. Jeśli nie potrzebujesz przycisku AcceptButton, dźwięk dzwonka można wyciszyć, ustawiając w formularzu KeyPreview wartość true i wprowadzając następujące zdarzenie KeyPress:
Bez względu na to, która kontrola jest aktywna, po naciśnięciu klawisza Enter nie będzie więcej dźwięku. Ponieważ kolejność przetwarzania kluczowych zdarzeń to KeyDown, KeyPress i KeyUp, klawisz Enter będzie nadal działał dla zdarzeń KeyDown dla formantów.
źródło
Ustaw właściwość IsDefault przycisku wyszukiwania na
true
. Spowoduje to, że będzie to przycisk domyślny i zostanie automatycznie kliknięty po naciśnięciu klawisza Enter.źródło
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
wydaje się bardziej stylowy, ale jestem przyzwyczajony doIsDefault
siebie.Cóż, żyłem z tym problemem wystarczająco długo i szukałem go tutaj.
Po zastanowieniu się nad tym od dłuższego czasu i szukaniu najprostszego sposobu, aby to naprawić, wymyśliłem najłatwiejszy, ale nie tak elegancki sposób, aby to naprawić.
Oto co zrobiłem.
To rozwiązało wszystkie drugorzędne problemy wymienione w tym wątku, w tym ToolStripMenu. Moją największą skargą był BindingNavigator, kiedy wprowadzałem numer rekordu w bieżącą pozycję, aby nawigować i naciskać Enter.
Zgodnie z pierwotnym pytaniem, w którym programista chciał funkcji wyszukiwania po naciśnięciu przycisku Enter, po prostu umieściłem kod wyszukiwania w niewidocznym przycisku OK!
Jak dotąd wydaje się, że rozwiązuje to wszystkie problemy, ale jak wszyscy wiemy z Visual Studio, prawdopodobnie coś się pojawi.
Jedynym innym możliwym eleganckim sposobem, jaki mógłbym wymyślić, byłoby napisanie nowej klasy obsługi naciśnięć klawiszy, co w przypadku większości moich projektów wymaga dużo pracy.
źródło
Możesz ustawić wieloliniowy tekst w polu tekstowym na wartość true, a następnie naciśnij klawisz Enter.
źródło
Zmieniłem właściwości pola tekstowego dla wielowierszowego pola tekstowego i to działa dla mnie.
źródło
źródło
Multiline
kod jest całkowicie nieistotny.