Ich habe eine sehr einfache Windows Forms-Anwendung. Wenn Sie in Windows (oder zumindest in Windows Forms-Anwendungen) in einem einzeiligen TextBox-Steuerelement die Eingabetaste drücken, hören Sie ein Ding. Es ist ein unangenehmer Sound, der anzeigt, dass Sie keine neue Zeile eingeben können, da es sich um eine einzeilige TextBox handelt.
Das ist alles in Ordnung. In meinem Formular habe ich jedoch 1 Textfeld und eine Suchschaltfläche. Und ich bin so dass der Benutzer eine Suche durchführen , indem Sie eingeben , nachdem sie den Befehl eingegeben hat, so dass sie nicht haben , um mit der Maus auf die Schaltfläche Suchen klicken.
Aber dieser Ding-Sound tritt auf. Es ist sehr nervig.
Wie können wir es so machen, dass der Sound in meiner Form überhaupt nicht abgespielt wird?
@ David H - So erkenne ich die Eingabetaste:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
quelle
Antworten:
Überprüfen Sie die Form.AcceptButton- Eigenschaft. Sie können damit eine Standardschaltfläche für ein Formular angeben, in diesem Fall die Eingabetaste.
Aus den Dokumenten:
Es gibt auch eine CancelButton- Eigenschaft, wenn der Benutzer die Escape- Taste drückt.
quelle
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Für mich geht das:
Die SuppressKeyPress ist der wahre Trick. Ich hoffe das hilft dir.
quelle
e.Handled = true;
war unzureichend; es war dasSuppressKeyPress
, was den Trick tat.ToolStripTextBox.KeyDown
. Keine andere Lösung hat es getan. Vielen Dank!textbox
undKeyDown
EreignisVersuchen
quelle
Tab
zuerst drückt ?Fügen
e.SuppressKeyPress = true;
Sie einfach Ihre "if" -Anweisung hinzu.quelle
Sie können KeyPress anstelle von KeyUp oder KeyDown verwenden, es ist effizienter und hier erfahren Sie, wie Sie damit umgehen
und sag Frieden zu dem 'Ding'
quelle
KeyDown
, mite.Handled
unde.SuppressKeyPress
nicht für mich gearbeitet - immer noch dinging. Aber es wie hier vorgeschlagen zuKeyPress' event and
ändern , um das e.Handled` zu verwenden, hat es gut gemacht.Verwenden Sie
SuppressKeyPress
diese Option , um die weitere Verarbeitung des Tastenanschlags nach der Handhabung zu beenden.quelle
Ich bin über diesen Beitrag gestolpert, als ich versucht habe, mit einem KeyDown umzugehen, der für mich funktioniert hat.
Durch Unterdrücken des Tastendrucks wird verhindert, dass das Ereignis an das zugrunde liegende Steuerelement gesendet wird. Dies sollte funktionieren, wenn Sie alles, was die Eingabetaste in diesem Textfeld tut, manuell verarbeiten. Entschuldigung für das Visual Basic.
quelle
Es gibt nur eine sehr geringe Chance, dass jemand auf diese Antwort kommt, aber einige andere Antworten sind wirklich beängstigend. Das Unterdrücken eines Ereignisses bei
KeyDown
Tötung von 2 zusätzlichen Ereignissen in einem Schlag. Das Setzen dere.Handled
Eigenschaft auftrue
ist in diesem Zusammenhang nutzlos.Am besten setzen Sie die
Form.AcceptButton
Eigenschaft auf die eigentliche Suchschaltfläche.Es gibt auch eine andere Möglichkeit, den
Enter
Schlüssel zu verwenden - einige Leute möchten möglicherweise, dass er alsTAB
Knopf fungiert. Fügen Sie dazu eine neue hinzuButton
, setzen Sie ihreLocation
Eigenschaft außerhalb desForm
Bereichs (dh(-100, -100)
). Wenn Sie dieVisible
Eigenschaft so einstellenfalse
, dassButton
Handler in einigen Fällen deaktiviert werden. Setzen Sie dieForm.AcceptButton
Eigenschaft auf Ihre neue Schaltfläche.Click
Fügen Sie im Ereignishandler den folgenden Code hinzuthis.SelectNextControl(ActiveControl, true, true, true, true)
Jetzt möchten Sie möglicherweise
focus
nur dann übertragen , wennfocus
SieTextBox
entweder denActiveControl
Typ testen oder diee.Supress
Eigenschaft in Ereignishandlern von Steuerelementen verwenden möchten, die nichtEnter
als "TAB
Das ist es" verwendet werden sollen. Sie müssen nicht einmal erfassene.KeyCode
quelle
quelle
In WinForms verursacht die Eingabetaste einen Ding-Sound, da die Formulareigenschaft AcceptButton nicht angegeben ist. Wenn Sie keinen AcceptButton benötigen, kann der Klingelton unterdrückt werden, indem Sie das Formular KeyPreview auf true setzen und das folgende KeyPress-Ereignis eingeben:
Unabhängig davon, welche Steuerung aktiv ist, ertönt beim Drücken der Eingabetaste kein Klingelton mehr. Da die Reihenfolge für die Verarbeitung von Schlüsselereignissen KeyDown, KeyPress und KeyUp lautet, funktioniert die Eingabetaste weiterhin für die KeyDown-Ereignisse für die Steuerelemente.
quelle
Setzen Sie die IsDefault- Eigenschaft Ihrer Suchschaltfläche auf
true
. Dies macht es zu einer Standardschaltfläche und wird automatisch angeklickt, wenn die Eingabetaste gedrückt wird.quelle
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
scheint stilvoller, aber ich bin anIsDefault
mich selbst gewöhnt.Nun, ich habe lange genug mit diesem Problem gelebt und es hier nachgeschlagen.
Nachdem ich einige Zeit darüber nachgedacht hatte und den einfachsten Weg wollte, es zu reparieren, fand ich den einfachsten, aber nicht so eleganten Weg, es zu reparieren.
Hier ist was ich getan habe.
Dies löste alle in diesem Thread aufgeführten sekundären Probleme, einschließlich des ToolStripMenu. Meine größte Beschwerde war der BindingNavigator, bei dem ich eine Datensatznummer an der aktuellen Position eingegeben habe, um zu navigieren, und die Eingabetaste gedrückt habe.
Gemäß der ursprünglichen Frage, in der der Programmierer eine Suchfunktion wünschte, als die Eingabetaste gedrückt wurde, habe ich einfach den Suchcode in die unsichtbare OK-Taste eingegeben!
Bisher scheint dies alle Probleme zu lösen, aber wie wir alle mit Visual Studio wissen, wird wahrscheinlich etwas auftauchen.
Die einzig andere elegante Möglichkeit, die ich mir vorstellen könnte, wäre das Schreiben einer neuen Klasse für die Handhabung von Tastenanschlägen, die für die meisten meiner Projekte viel zu viel Arbeit bedeutet.
quelle
Sie können Ihr Textfeld mehrzeilig auf true setzen und dann die Eingabetaste drücken.
quelle
Ich habe die Eigenschaften des Textfelds für ein mehrzeiliges Textfeld geändert und es funktioniert für mich.
quelle
quelle
Multiline
Code völlig irrelevant.