Hallo!
Ich habe mehrere NumericUpDown-Felder auf einer Windows-Form. Nun möchte ich, dass nach dem Drücken der Eingabetaste das nächste Feld fokussiert wird. Dies gelingt mir bereits auf drei verschiedene Versionen. Allerdings kommt bei jeder der drei Versionen ein Ton.
Gibt es auch eine Variante, die Fokusweitergabe lautlos zu erreichen?
Wenn dann ein paar mehr Felder auf der Form sind, wird dieser Ton sehr schnell furchtbar nervig.
public partial class Testform : Form
{
public Testform()
{
InitializeComponent();
}
private void NumericUpDownFieldKeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
NumericUpDown nud_sender = (NumericUpDown)sender;
// Variant 1
this.SelectNextControl(this.ActiveControl, true, true, false, false);
// Variant 2
ProcessTabKey(true);
// Variant 3
switch (nud_sender.Name)
{
case "nud_field1":
nud_field2.Focus();
break;
case "nud_field2":
nud_field3.Focus();
break;
case "nud_field3":
nud_field4.Focus();
break;
case "nud_field4":
MessageBox.Show("Sum: " + (nud_field1.Value + nud_field2.Value + nud_field3.Value + nud_field4.Value));
break;
}
}
}
}
Kann mir bitte jemand helfen?
Danke im Voraus!
Gruß
Hallo soso,
ich würde es mal mit [FAQ] Textbox: Signalton nach drücken der Eingabetaste unterdrücken probieren.
Für die Focusweitergabe solltest du ActiveControl verwenden und nicht Focus, denn:
Focus ist eine Methode auf niedriger Ebene, die hauptsächlich für Autoren benutzerdefinierter Steuerelemente bestimmt ist. Anwendungsprogrammierer sollten hingegen die Select-Methode oder die ActiveControl-Eigenschaft für untergeordnete Steuerelemente bzw. die Activate-Methode für Formulare verwenden.
herbivore
Hallo!
Danke für die Hinweise und Tipps. Ich hatte wirklich zuerst m Internet gegooglt und im Forum gesucht bevor ich den Thread erstellt habe, die entsprechenden Passagen allerdings nicht gefunden.
Allerdings hilft mir die Antwort nicht wirklich weiter. Jetzt habe ich noch eine weitere Ewigkeit herumprobiert und geforscht, bin aber leider zu keiner Lösung gekommen.
Dennoch bin ich einen Schritt weiter: Mir ist jetzt bekannt, das mein Problem ein anderes ist: Das Auftreten dieses nervigen Signaltons erfolgt nicht im Zusammenhang mit der Fokusweitergabe. Vielmehr wird der Ton durch die automatische Eingabevalidierung des NumericUpDown-Feldes ausgelöst. Die Eingabetaste gilt hier wohl als ungültig. Der Ton kommt immer, nachdem eine andere Taste als eine Zahlentaste gedrückt wurde.
Daher ist mein Problem wohl ein anderes: Wie kann ich die Eingabetaste als gültige Eingabe des NumericUpDown-Feldes anerkennen? (Also mit in die für die Validierung gültigen Tasten aufnehmen?)
Kennt da vielleicht jemand eine Lösung oder hat eine Idee und kann mir bitte helfen?
Besten Dank im Voraus!
Gruß
Und wenn du das KeyDown-Event nimmst und e.Handled auf true setzt?
Darth Maim
Hi,
ich hänge mich an diesen älteren Thread mal dran, da ich vor dem selben Problem stehe. Ich prüfe im KeyPress meiner NumericUpDown-Controls auf die Enter-Taste und führe bei Enter eine Berechnungsmethode aus.
Und wenn du das KeyDown-Event nimmst und e.Handled auf true setzt?
Das (bzw. die Variante im KeyPress-Ereignis, die laut o.g. FAQ-Eintrag die korrekte Stelle wäre) habe ich ohne Erfolg probiert. Beim Durchsteppen wird "e.Handled = true" aufgerufen.
Hat jemand eine Idee?
Danke und viele Grüße,
Patrick
Liebe Freunde der NumericUpDowns!
Ich habe im Microsoft-Forum die Lösung zu dem Problem gefunden:
private void NumericUpDown1KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
this.ActiveControl = numericUpDown2;
e.SuppressKeyPress = true;
}
}
VG, Florian
Hallo!
Ich habe inzwischen auch eine Lösung für das Problem gefunden:
private void NumericUpDownFieldKeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
ProcessTabKey(true);
}
}
Setzt natürlich voraus, dass man die Tab-Reihenfolge gesetzt hat.
Gruß