2010-12-27 2 views
2

Ich habe ein Textfeld und in einigen Fällen in Enter-Ereignis muss ich den Fokus auf eine andere Textbox festlegen.Alternative zum Festlegen des Fokus innerhalb des Enter-Ereignisses

habe ich versucht, diesen Code:

private void TextBox1_Enter(object sender, EventArgs e) 
{ 
    if(_skipTextBox1) TextBox2.Focus(); 
} 

Aber dieser Code funktioniert nicht. Danach fand ich auf MSDN:

Versuchen Sie nicht, den Fokus von innerhalb der Eingabe zu setzen, GotFocus, verlassen, Lost-Focus, Validieren oder Validierte Event-Handler.

Also wie kann ich es anders machen?

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
    { 
     e.Handled = true; 
     TextBox2.Focus(); 
    } 
} 

Antwort

3

Postpone den Fokus der Ausführung() -Methode, bis nach dem Ereignis die Ausführung ist beendet:

0

Sie konnten die KeyPress Ereignis stattdessen behandeln. Elegant durch die Verwendung der Control.BeginInvoke() -Methode. Wie folgt aus:

private void textBox2_Enter(object sender, EventArgs e) { 
     this.BeginInvoke((MethodInvoker)delegate { textBox3.Focus(); }); 
    } 
+0

Es ist nicht 'Enter-Taste', sondern 'Enter-Ereignis'. Control.Enter

+0

@Alex - Ah, tut mir leid. In diesem Fall würde ich wahrscheinlich einen 'Timer' einrichten und ihn einfach auf dem Enter-Event aktivieren und das' Interval' für etwas Kleines wie 200ms oder so einstellen. – SwDevMan81

0
textBox.Select(); 

oder

textBox.Focus(); 

oder set TabIndex = 0 von Eigenschaften dieser textBox.

beide Methoden sind die Verwendung Fokus auf textBox in C#, setzen .NET