2009-06-03 8 views
0

In einer Standard-WinForms-Anwendung beenden wird, ist es möglich, ein Szenario wie folgt zu haben und wie würde ich es tun:Steuerung, die eine Registerkarte zweimal

Ein Formular mit vier Textboxsteuerelemente, auf dem Formular von oben angeordnet nach unten:

  • TextBox1
  • TextBox2
  • TextBox3
  • TextBox4

Das gewünschte Verhalten ist, dass, wenn die Form geladen wird, der Fokus auf TextBox3 ist, aber wenn der Tabulatortaste out, der Schwerpunkt nach oben geht und geht durch alle Bedienelemente als normal, in der folgenden Art und Weise:

  1. TextBox3
  2. TextBox1
  3. TextBox2
  4. TextBox3
  5. TextBox4

Antwort

1

Dies wäre etwas, das Sie codieren müssen, und es erfordert eine ordnungsgemäße Verwendung von Ereignissen. Legen Sie die Tabulatorreihenfolge so fest, wie Sie es möchten, und codieren Sie dann Folgendes:

private bool OnLoad = True; 

Form_OnLoad(...) { 
    TextBox3.SetFocus(); 
} 

TextBox3_LostFocus(...) { 
    if (OnLoad) { 
     TextBox1.SetFocus(); 
     OnLoad = false; 
    } // The else falls through to the default tab order 
} 
+0

Ich dachte, dies ist der Weg, zu gehen, ein „ist dies das erste Mal?“ Flag, aber ich wollte es vermeiden, wenn möglich. – robertkroll

+0

@krolley - Ich bezweifle, dass es eine Möglichkeit gibt, die "erste Zeit" -Flagge zu vermeiden und es wird wahrscheinlich sauberer und einfacher zu verstehen sein als die Manipulation von TabIndexes –

0

Kurze Antwort: absolut!

Das Layout im Formular hat nichts mit der Tab-Reihenfolge zu tun. Sie legen die Tab-Traversierung - und den Startpunkt - fest, indem Sie die TabIndex-Eigenschaft festlegen. Das Start-Steuerelement sollte eine 0 erhalten, die nächste eine 1 und so weiter. Außerdem ist die TabStop-Eigenschaft nützlich, um festzulegen, welche Steuerelemente mit der Tab-Taste erreichbar sein sollen.

0

Sie können dies möglicherweise in die Arbeit mit der folgenden Konfiguration von TabIndex-Eigenschaften zu kaufen.

  • Label for Textbox 3 = 1
  • TextBox1 = 2
  • TextBox2 = 3
  • TextBox3 = 4
  • TextBox4 = 5

Sie das Label eingestellt haben Haben TabStop = "True". Aber ich denke, das könnte funktionieren. Bitte bedenken Sie, dass ich bin nicht 100% sicher auf dieses ...

+0

Es ist ein künstliches Beispiel, aber leider haben die Textfelder keine Labels . – robertkroll

1

LFSR hat Recht:

Sie auf TextBox3 Lostfocus-Ereignis Code muss, ist dies ein VB Beispiel

static notFirstTime as boolean 
if notFirstTime then exit sub 
textbox1.setFocus 
notfirstTime=true 
0

In Ihrem Konstruktor (oder Designer) Legen Sie die Tabl-Indizes so (oder so ähnlich).

this.textBox1.TabIndex = 1; 
this.textBox2.TabIndex = 2; 
this.textBox3.TabIndex = 0; 
this.textBox4.TabIndex = 4; 

Dann Setup ein Ereignis das tabIndex von Textbox 3 auf den neuen Wert zu setzen:

private void textBox3_Leave(object sender, EventArgs e) 
{ 
    textBox3.TabIndex = 3; 
} 
Verwandte Themen