Laden...

TabControl - Tabpage darf nicht vom Nutzer gewechselt werden

Erstellt von Theo vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.647 Views
T
Theo Themenstarter:in
40 Beiträge seit 2011
vor 11 Jahren
TabControl - Tabpage darf nicht vom Nutzer gewechselt werden

Hallo,

ich habe eine Frage zum TabControl. Ich habe links einen TreeView und rechts einen TabControl mit zwei TabPages. Jenachdem welchen Knoten ich im TreeView selektiere ändert sich die selektierte TabPage des TabControls. Funktioniert auch alles soweit.

Ich würde es jetzt gern verbieten, dass der Nutzer die TabPages wechseln kann, sodass es nur zu einem Wechsel der TabPages kommt, wenn dies durch den Code angestoßen wird.
Ist dies generell möglich, oder ist die TabControl Variante nicht zu empfehlen?

Danke für alle Antworten,
Theo

C
2.122 Beiträge seit 2010
vor 11 Jahren

Du kannst schon in einem Event (Changing oder so irgendwie) drauf reagieren und das verbieten.
Es ist aber alles andere als empfehlenswert, weil man von so einem Control gewohnt ist und auch erwartet, dass man beliebig drin hin und her schalten kann.

R
158 Beiträge seit 2007
vor 11 Jahren

Entweder die Tabreiter zur Laufzeit verstecken:

         //diese Einstellungen verstecken die Reiter erst zur Laufzeit
         //zur Design-Zeit sind die Reiter ja sehr nützlich
         tabControl1.SizeMode = TabSizeMode.Fixed;
         tabControl1.ItemSize = new Size(0, 1);
         tabControl1.Appearance = TabAppearance.Buttons;


siehe auch TabControl als Basis für Assistenten und sowas

oder einen SplitContainer-Control anstelle des TabPageControl verwenden

2.298 Beiträge seit 2010
vor 11 Jahren

Hallo raiguen,

ich denke der Hinweis von chilic sollte bereits Zielführend sein.

Hallo Theo,
alles was du tun müsstest, wäre die Benutzereingaben zu behandeln. Klickt der Nutzer mit der Maus auf einen Tab oder wählt diesen mit der Tastatur aus, setzt du ein Flag in deiner Form.

Der Klick bzw. die Tastatureingabe haben zur Folge, das der Tab gewechselt wird. Bindest du nun das TabSelecting-Event, kannst du in diesem mittels den EventArgs das ändern des Tabs verhindern. - Hier kommt dann dein Flag zum tragen, auf welches du Prüfen musst und anschließend wieder zurück setzen musst.

Auch wenn der Nutzer einen für den Tabwechsel notwendigen klick auf das TreeView macht, musst du das Flag zurücksetzen, damit der Tabwechsel anschließend durchgeführt wird.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

R
158 Beiträge seit 2007
vor 11 Jahren

Hallo Theo,
alles was du tun müsstest, wäre die Benutzereingaben zu behandeln. Klickt der Nutzer mit der Maus auf einen Tab oder wählt diesen mit der Tastatur aus, setzt du ein Flag in deiner Form.

Hallo inflames2k: warum alles so verkomplizieren, wenn man es auch einfacher machen kann?

Es ist aber alles andere als empfehlenswert, weil man von so einem Control gewohnt ist und auch erwartet, dass man beliebig drin hin und her schalten kann. Genau das sollte man vermeiden: den User zu verärgern dahingehend, dass er sich ärgert/wundert, warum (hier z.b.) ein Tabwechsel nicht möglich ist.
Wenn - wie in Theos Szenario - nur zwei Panels (nicht anderes sind TabPages) abwechselnd sichtbar sein sollen, dann kann ich entweder die Tabreiter verstecken (und dennoch sind die TabPages codemässig wechselbar) oder eben ein SplitPanel-Container benutzen, wo die entsprechenden Panels dann sichtbar gemacht werden. Nicht mehr und nicht weniger.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo inflames2k,

Klickt der Nutzer mit der Maus auf einen Tab oder wählt diesen mit der Tastatur aus, setzt du ein Flag in deiner Form.

das ist viel zu unsicher und auch unnötig. Besser ist es andersherum, siehe [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung.

Ich fänds allerdings auch besser, wenn aktuell nicht aktivierbare Tab-Pages ausgeblendet werden.

herbivore

T
Theo Themenstarter:in
40 Beiträge seit 2011
vor 11 Jahren

Entweder die Tabreiter zur Laufzeit verstecken:

Hallo raiguen,

danke fuer diesen Hinweis. Ich habe mich fuer diese Methode entschieden, weil sie genau das macht was ich will. Ich wusste garnicht, dass man den ganzen Kram mit den Tabwechsel auch ausblenden kann.
Im VisualStudio brauch ich die Buttons noch, dann will ich aber eigentlich nur die Seiten je nach Bedingung sichtbar machen.

Danke nochmal fuer alle Antworten!

Gruss,
Theo

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Theo,

dann brauchst du aber gar kein TabControl, sondern kannst das machen, wie in [FAQ] Assistenten/Wizards: Mit Windows Forms eine Art Frameset einer Website nachbauen beschrieben, nur dass du dann keine Navigationelemente für den Benutzer brauchst.

herbivore

T
Theo Themenstarter:in
40 Beiträge seit 2011
vor 11 Jahren

Hallo herbivore,

ja da hast du recht. Ich brauche eigentlich für meine Lösung kein TabControl, aber ich finde es sehr charmant den Designer vom VisualStudio zu nutzen. In deinem Beispiel baust du die Oberfläche ja per Hand zusammen. Ich hab in den jeweiligen TabPages zich Textboxes, ein Datagridview und paar Buttons, daher fand ich die Lösung mit dem TabControl zum Erstellen der jeweiligen Seite recht angenehm.

Wie würdest du das realisieren? Durch ein UserControl?

Gruss,
Theo

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Theo,

Wie würdest du das realisieren?

per Hand 😃 aber in dem Link steht ja auch:

Das Beispiel wurde ohne Verwendung des VS-Designer erstellt. Wenn man den VS-Designer verwenden will, geht das auch. Dann sollte man statt Panels jedoch UserControls verwenden, weil man die sich gegenseitig verdeckenden Panels im Designer schlecht bearbeiten kann. UserControls kann man dagegen eigenständig bearbeiten ... und dann anschließend in das Zielfenster ziehen und übereinander legen.

herbivore