2012-06-15 14 views
7

Ich habe eine Windows-Formularanwendung. Auf dem Formular befinden sich drei Groupboxes. Jedes Gruppenfeld enthält einige Steuerelemente. Bitte sehen Sie das Bild. formTabIndex funktioniert nicht richtig

Es gibt ein Groupbox "Flag", das ein paar Checkboxen enthält. "flag" befindet sich in "groupbox1". Ich benutzte Tab-Taste, um durch jedes Steuerelement gehen, aber es funktioniert nicht für Kontrollkästchen in "Flag". Ich habe für jedes Steuerelement den richtigen Tabindex gesetzt.

Es funktioniert für Textfelder und Schaltflächen, aber Kontrollkästchen.

Warum? Danke für die Hilfe.

EDIT

// groupBox2 
     // 
     this.groupBox2.Controls.Add(this.pictureBox10); 
     this.groupBox2.Controls.Add(this.pictureBox9); 
     this.groupBox2.Controls.Add(this.pictureBox8); 
     this.groupBox2.Controls.Add(this.pictureBox7); 
     this.groupBox2.Controls.Add(this.chkStoplight); 
     this.groupBox2.Controls.Add(this.lblStoplight); 
     this.groupBox2.Controls.Add(this.chkIsCount); 
     this.groupBox2.Controls.Add(this.chkExceptionFlag); 
     this.groupBox2.Controls.Add(this.chkIsActive); 
     this.groupBox2.Controls.Add(this.lblIsActive); 
     this.groupBox2.Controls.Add(this.lblExceptionFlag); 
     this.groupBox3.Controls.Add(this.lblIsCount); 
     this.groupBox2.Location = new System.Drawing.Point(16, 201); 
     this.groupBox2.Name = "groupBox2"; 
     this.groupBox2.Size = new System.Drawing.Size(321, 70); 
     this.groupBox2.TabIndex = 10; 
     this.groupBox2.TabStop = true; 
     this.groupBox2.Text = "Flags"; 

     // 
     // chkStoplight 
     // 
     this.chkStoplight.AutoSize = true; 
     this.chkStoplight.Location = new System.Drawing.Point(44, 25); 
     this.chkStoplight.Name = "chkStoplight"; 
     this.chkStoplight.Size = new System.Drawing.Size(15, 14); 
     this.chkStoplight.TabIndex = 0; 
     this.chkStoplight.UseVisualStyleBackColor = true; 

     In the property, I found TabStop is true for chkStoplight. 
+0

Bitte sagen Sie uns, welches Steuerelement aktiv wird, nachdem Sie kontinuierlich auf die Registerkarte drücken –

+0

Konnten Sie Ihren Code posten? – Dante

+0

Der Code ist nur Zahlen für Tabindex. Alle Steuerelemente sind aktiv, mit Ausnahme von Kontrollkästchen. –

Antwort

9

Für System.Windows.Forms.GroupBox:

sollten Sie sicherstellen, dass Ihr GroupBox flag ein entsprechendes TabIndex-Set hat.

Von MSDN - How to: Set the Tab Order on Windows Forms:

Zusätzlich standardmäßig ein GroupBox-Steuerelement verfügt über einen eigenen TabIndex Wert, der eine ganze Zahl ist. Ein GroupBox-Steuerelement selbst kann Fokus zur Laufzeit nicht haben. Daher hat jedes Steuerelement innerhalb einer GroupBox einen eigenen dezimalen TabIndex-Wert, beginnend mit .0. Wenn der TabIndex eines GroupBox-Steuerelements inkrementiert wird, werden die darin enthaltenen Steuerelemente natürlich entsprechend inkrementiert. Wenn Sie einen TabIndex-Wert von 5 bis 6 geändert, der TabIndex-Wert der ersten Kontrolle in ihrer Gruppe automatisch Änderungen auf 6,0, und so weiter

Stellen Sie außerdem sicher, dass das TabStop Eigentum Ihrer GroupBox flag ist nicht auf falsch gesetzt. Ich glaube, falsch ist der Standard.

Für System.Windows.Controls GroupBox:

Vergewissern Sie sich, dass die GroupBox.IsTabStop Eigenschaft festgelegt ist. Dies ist auch standardmäßig falsch.

Update: Es scheint, dass sich alle Ihre Kontrollen groupBox3 hinzugefügt werden. Sie sollten sicherstellen, dass jeder von ihnen nur zu seinem übergeordneten Gruppenfeld hinzugefügt wird. Zum Beispiel sollten checkBox1, checkBox2 und checkBox3 alle zu flag hinzugefügt werden, die selbst zu groupBox1 hinzugefügt werden sollte. groupBox3 sollte nur Zurück, Weiter, Fertig stellen und Abbrechen enthalten.

+0

Es gibt keine TabStop-Eigenschaft für GroupBox. –

+0

Überprüfen Sie den Link. Es wird speziell für das MSDN-articale für GroupBox.TabStop Property verwandt. Außerdem habe ich das Erstellen einer neuen GroupBox getestet und überprüft, dass a) die Eigenschaft existiert und b) sie standardmäßig auf false gesetzt ist. –

+0

Okay. Vielleicht ist das Kontrollkästchen nur für Maus und nicht für Tastenanschlag? –

1

Ich fand, dass die einzige Möglichkeit, die Registerreihenfolge in WinForms-Gruppenfeldern zu erhalten, die Reihenfolge ändert, in der die Steuerelemente zu den Gruppenfeldern in der generierten InitializeControl-Methode hinzugefügt werden.

Wenn Sie mehrere Gruppenrahmen haben, müssen Sie die Reihenfolge überprüfen, in der die Gruppenrahmen zu ihrem Container hinzugefügt und möglicherweise geändert werden.

Ich mag es wirklich nicht, generierten Code zu bearbeiten, aber soweit ich sehen kann, ist dies der einzige Weg, dies zu beheben.

Das Festlegen der TabStop-Eigenschaft des Gruppenfelds hat überhaupt nicht geholfen.