Laden...

Fokusweitergabe nach Eingabetaste

Erstellt von soso vor 14 Jahren Letzter Beitrag vor 12 Jahren 2.849 Views
S
soso Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren
Fokusweitergabe nach Eingabetaste

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ß

49.485 Beiträge seit 2005
vor 14 Jahren

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

S
soso Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren
Das Problem ist wohl ein anderes: Die automatische Eingabevalidierung des NumericUpDown-Feldes

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ß

D
216 Beiträge seit 2009
vor 14 Jahren
KeyDown-Event

Und wenn du das KeyDown-Event nimmst und e.Handled auf true setzt?

Darth Maim

H
18 Beiträge seit 2010
vor 13 Jahren

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

D
91 Beiträge seit 2005
vor 13 Jahren

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

S
soso Themenstarter:in
3 Beiträge seit 2010
vor 12 Jahren

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ß