Laden...

TabControl mit Panel welches UserControl beinhaltet

Erstellt von cpetit vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.802 Views
C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 15 Jahren
TabControl mit Panel welches UserControl beinhaltet

Hallo, vielleicht kann mir jemand von euch weiter helfen da ich in C# noch nicht ganz verstanden habe.

Zu meinem Problem.
Habe eine Form das ein TabControl beinhaltet welches mehere Tab hat.
Jedes Tab hat einen Panel jedes dieser Panel soll das gleiche UserControl
zugewiesen bekommen. Leider sehe ich das UserControl immer nur auf der
letzten Tab-Seite.



// Benutzerkontroll zuweisen
Asd_Stamm frm = new Asd_Stamm();

this.ShowPanel1.Controls.Add(frm);
this.ShowPanel2.Controls.Add(frm);
this.ShowPanel3.Controls.Add(frm);
this.ShowPanel4.Controls.Add(frm);
this.ShowPanel5.Controls.Add(frm);
this.ShowPanel6.Controls.Add(frm);
this.ShowPanel8.Controls.Add(frm);

In dem UserControl sollen Informationen stehen die ich gerne auf allen Tab
sehen möchte.

Hat jemand einen Tipp?

3.511 Beiträge seit 2005
vor 15 Jahren

Hallo, vielleicht kann mir jemand von euch weiter helfen da ich in C# noch nicht ganz verstanden habe.

Dann siehe :rtfm: 🛈 📗

Zum Problem:
Sobald du ShowPanel2.Controls.Add(frm) machst, wird der Parent von frm mit geändert. Somit "wandert" dein UserControl bei deinen Codezeilen von Panel zu Panel.
Entweder änderst du den Parent erst bei einem wechsel des Tabs, oder du musst für jedes Panel ein eigenes UserControl erstellen. Welche vorgehensweise besser ist, hängt IMHO davon ab, was man machen will.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 15 Jahren

Zuerst mal danke für deine Anwort.

Entweder änderst du den Parent erst bei einem wechsel des Tabs

Wie ändert man die Parent ?

Was ist die bessere Lösung?
In dem UserControl sollen die Grunddaten der Person stehen("Name,Vorname,....")

Wie kann ich auf die Controls im UserControl zugreifen?

3.511 Beiträge seit 2005
vor 15 Jahren

Schau bitte in das 🛈
[Hinweis] Wie poste ich richtig? (1.1.1)

Nur als kurzer Überblick:

Wie ändert man die Parent ?

Entweder so, wie du es schon gemacht hast, oder über die Eigenschaft Control.Parent.

Was ist die bessere Lösung?

In dem Falle würde ich zum Wechseln des Parents tendieren.

Wie kann ich auf die Controls im UserControl zugreifen?

Im UserControl kannst du direkt auf die Controls zugreifen, ausserhalb des UserControls gar nicht, bzw. sollte man nicht machen. Das UserControl sollte öffentliche Eigenschaften/Methoden haben, mit dem die unterliegenden Controls "gesteuert" werden.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo cpetit,

Wie ändert man die Parent ?

durch Zuweisung! Grundlagen! Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Außerdem ändert sich der Parent durch parent.Controls.Add (child).

Was ist die bessere Lösung?

Ein UserControl sollte in deinem Fall die bessere Wahl sein, insbesondere wenn du viele Tabs hast.

Wie kann ich auf die Controls im UserControl zugreifen?

Das solltest du auf keinen Fall tun. Das UserControl sollte passende Properties und Methoden für seine Benutzung zur Verfügung stellen.

herbivore

PS: Khalid ist doch schön, wenn wir uns gegenseitig und unabhängig voneinander so bestätigen. 🙂

F
323 Beiträge seit 2007
vor 15 Jahren

Eine Frage noch am Rande:
Warum packst du auf jede TabPage ein Panel und dann darauf das UserControl? Wenn du eh nur dieses eine UserControl anzeigen willst, dann packe es doch gleich auf die TabPage. Das Panel ist somit völlig überflüssig!
Macht den Code überschaubarer/klarer und spart ein paar Bytes an RAM. 😁

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 15 Jahren

Danke.
Habe es jetzt so gemacht.


		private void ToggleControls()
		{
			// Benutzerkontroll zuweisen
			this.frm = new Asd_Stamm_Arzt();

			this.ShowPanel1.Controls.Add(frm);
		}

		private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			switch(tabControl1.SelectedIndex)       
			{
				case 0:
					this.ShowPanel1.Controls.Add(frm);
					break;
				case 1:
					this.ShowPanel2.Controls.Add(frm);
					break;
				case 2:
					this.ShowPanel3.Controls.Add(frm);
					break;
				case 3:
					this.ShowPanel4.Controls.Add(frm);
					break;
                                ......................

			}
		}

und funktioniert.

Das solltest du auf keinen Fall tun. Das UserControl sollte passende Properties und Methoden für seine Benutzung zur Verfügung stellen.

Werde es mal so probieren.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo cpetit,

tabControl1.SelectedTab.Controls.Add(frm);

herbivore

R
158 Beiträge seit 2007
vor 15 Jahren

...Wenn du eh nur dieses eine UserControl anzeigen willst, dann packe es doch gleich auf die TabPage. Das Panel ist somit völlig überflüssig!...

Genau 😉 Und er 'wechsel'-Code wird dann auch übersichtlicher:


//entweder
		private void tabControl1_SelectedIndexChanged ( object sender, EventArgs e )
		{
			frm.Parent = tabControl1.SelectedTab;
		}
//--oder
		private void tabControl1_Selected ( object sender, TabControlEventArgs e )
		{
			frm.Parent = e.TabPage;
		}

btw: das 'elternWechsel-Dich' könnte man auch vermeiden und das Ganze so aufbauen (unter der Voraussetzung, das NUR dieses eine UserControl für alle Pages verwendet wird)

  1. ein Panel in ausreichender Grösse
  2. darauf das TabControl mit Dock=Top und Höhe ca 25pixel (also nur die Reiter sichtbar)
  3. darunter dein UserControl - meintwegen auch Dock=Top, so dass es schön unter dem TabControl plaziert ist
  4. _frm.Parent = ..._entfällt natürlich in den u.a. Events 😉

Gruss Rainer