2012-04-09 4 views
3

Ich habe ein paar Textfelder auf meinem winform. Ich habe auch ein paar Knöpfe darauf. Wenn ich nun in eine solche Textbox tippe und auf eine Schaltfläche klicke, dann geht der Eingabefokus aus der Textbox verloren und die Schaltfläche erhält den Eingabefokus der Tastatur. Das bedeutet, dass der Cursor in dem Moment aus der Textbox verschwindet, wenn wir auf die Schaltfläche klicken. Ich will dieses Verhalten nicht. Ich möchte, dass mein Textfeld den Cursor auch dann enthält, wenn ich auf die Schaltfläche klicke. Die reale Situation ist, dass ich Textfeld und Zifferntasten nur von Touchscreen verwenden.Wie man ein winform mit Tasten erzeugt, die nie Tastaturfokus anziehen

private void Button_Click(...) 
{ 
    FocusTextBox(); 
    // Do things... 
} 

private void FocusTextBox() 
{ 
    textBox.Focus(); 
} 

Antwort

0

Sie den Fokus auf das Textfeld auf Schaltflächen klicken Ereignishandler wie folgt gesetzt werden könnte. Wählen Sie ein beliebiges Bedienelement aus, von dem Sie glauben, dass es sinnvoll wäre, nach dem Drücken der Taste den Fokus zu erhalten. Zum Beispiel setzen Sie den Fokus auf ein Textfeld, Code wie folgt verwendet:

textBox1.Focus(); 

Dies verhindert, dass Ihre Schaltfläche Fokus von gewinnen, wenn eine Schaltfläche geklickt wird.

Setzen Sie außerdem die Eigenschaft TabStop Ihrer Schaltfläche auf false.

Die anderen Antworten, die darauf hindeuten, dass Sie die Eigenschaft CanFocus auf false setzen, funktionieren nicht, da diese Eigenschaft für Schaltflächen schreibgeschützt ist.

+0

was ist, wenn es gab mehr als zwei Textfelder? –

4

In Ihrem Schaltfläche Click-Ereignishandler (s), explizit Fokus auf eine andere Steuer:

+0

Das ist gut zu wissen. Gibt es eine Möglichkeit, das Flimmern zu verhindern und die Lösung mit mehr als 1 TextBox arbeiten zu lassen? – Alexandre

+0

Was wäre, wenn mehr als zwei Textfelder vorhanden wären? –

+0

@ r.hamd - Sie verstehen die Antwort falsch. In jedem ** Button ** Click-Handler setzen Sie den Fokus auf ** ein anderes Steuerelement **. Verwenden Sie ein beliebiges Steuerelement, das für den nächsten Fokus sinnvoll ist. Eine logische Wahl besteht darin, den Fokus auf ** ein Textfeld ** zu setzen, das * nach * der Schaltfläche ist. Optisch würde dies genauso aussehen, wenn jemand in das Textfeld "ein Tabstopp" macht, um es zur aktiven Eingabe zu machen. Eine weitere gute Alternative ist, den Fokus auf das ** erste Textfeld ** im Formular zu setzen. [Bearbeiten der Antwort, um dies zu verdeutlichen.] – ToolmakerSteve

8

Versuchen Sie, Ihre eigenen Button-Steuerelement erstellen, die vom Standard erbt aber schaltet den Selectable Stil:

public class ButtonEx : Button { 
    public ButtonEx() { 
    this.SetStyle(ControlStyles.Selectable, false); 
    } 
} 
0

Erstellen von benutzerdefinierten Button Klasse mit Focusable Eigenschaft, setzen Focusable zu false

public class ButtonEx : Button 
{ 
    [DefaultValue(true)] 
    public bool Focusable 
    { 
     get { return GetStyle(ControlStyles.Selectable); } 
     set { SetStyle(ControlStyles.Selectable, value); } 
    } 
} 
Verwandte Themen