Laden...

[erledigt] Problem mit TabIndex durch FlowLayoutPanel

Erstellt von Siedlerchr vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.771 Views
S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 11 Jahren
[erledigt] Problem mit TabIndex durch FlowLayoutPanel

Hallo zusammen,

ich hab ein kleines Problem mit der Tab-Reihenfolge meiner Controls.
Ich habe nen UserControl auf dem mehrere Textboxen und daneben jeweils einen Button.
Die Buttons sind untereinander auf einem FlowLayoutPanel angeordnet.

Ich habe die TabIndex-Werte entsprechend eingetrage, dass er von links nach Rechts gehen soll (Textbox-->Button).
Mein Problem ist jetzt, dass die Tab-Reihenfolge ignoriert wird, er springt von der 1. Textbox nicht zum Button, sondern auf die nächste Textbox in der nächsten Zeile.
Das FlowLayoutPanel hat in dem Fall einen TabIndex der größer als alle anderen sind.

Jetzt habe ich versucht dem FlowLayoutPanel den TabIndex 2 zu geben. Das klappt, er selektiert dann den 1. Button
Allerdings geht er jetzt in dem FlowLayoutPanel weiter von oben nach unten, er springt zum nächsten Button, obwohl in der TabOrder eigentlich die nächste TextBox kommen sollte.

Zur veranschaulichung habe ich mal einen Screenshot gemacht.
Frage: Wie kriege ich die TabOrder in die richtige Reihenfolge, sodass er von links nach rechts geht?

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Siedlerchr,

wenn Container im Spiel sind, kann man die Tabreihenfolge der einzelne Controls (gemeint sind die Blätter im Control-Baum) nicht beliebig setzen. Die absoluten Zahlen beziehen sich immer nur auf den jeweiligen Container. Die Tabreihenfolge wird quasi rekursiv abgearbeitet. Erst wird geschaut, wie die Tabreihenfolge der Controls, die sich direkt im Form befinden, festgelegt ist. Ist eins der Controls ein Container, dann werden immer erst alle in ihm enthaltenen Controls in deren eigener Tabreihenfolge abgearbeitet. Wenn eines davon wieder ein Container ist, geht das Spiel von neuem los. Erst wenn alle direkt und indirekt enthalten Controls abgearbeitet wurden, wird zum nächsten Control im Form gesprungen.

Du kannst also zwar von Control 1 in Container 1 zu Controls 1 in Container 2 springen, aber nur wenn es nur ein Control in Container 1 gibt. Wenn es mehrere Controls in Container 1 gibt, würden die erst alle angesprungen werden, bevor zu Container 2 gesprungen werden würde. Works an designed.

Du musst also die Container-Struktur so anpassen, dass sich Controls, die hintereinander angesprungen werden sollen, im gleichen Container befinden.

Das würde mir auch sowieso sinnvoller erscheinen. Wenn TextBox und Button zusammengehören, dann sollten sie auch in einem Container sein. Möglicherweise ist ein TableLayoutPanel hier besser geeignet. Oder geschachtelte FlowLayoutPanels mit mehreren Zeilen mit jeweils TextBox und Button.

herbivore

PS: Ich bin in der Beschreibung aus Gründen der Vereinfachung davon ausgegangen, dass für alle Controls Control.TabStop true ist.

S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 11 Jahren

Hallo herbivore,

danke für die Antwort!

Die absoluten Zahlen beziehen sich immer nur auf den jeweiligen Container

Ich hatte das anders in Erinnerung gehabt, ich war iwie davon ausgegangen das das pro Form/Window ist.
Habs jetzt mit einem TableLayoutPanel umgesetzt. Klappt jetzt mit der TabOrder