Zum Inhalt springen

c# Scrollbar erst bei zweitem Aufruf sichtbar (2010 Express)


Empfohlene Beiträge

Geschrieben

Hallo ihr Lieben,

folgende Konstellation:

Form1

- Panel (Panel1)

- UserControl (Usercontrol1)

- Panel (Panel2 - AutoScrollMinSize = 800;600)

- zwei Buttons, einer oben, einer ganz unten

ziehe ich das UserControl per Designer in das Panel1 sind zur Laufzeit beide Scrollbars in Panel2 da.

Dann habe ich folgendes gemacht:

1. im Code zwei UserControls vom Typ UserControl1 angelegt

2. zwei Buttons auf Form1 gezogen

3. in den Button-Click-Ereignissen jeweils das Panel geleert und ein UserControl dem Panel1 hinzugefügt.

Die Umschaltung funktioniert auch soweit, allerdings werden beim ersten Reinladen des UserControls die Scrollbars nicht angezeigt (die Eigenschaft HorizontalScrollbar z.B. steht zwar auf Enabled, jedoch ist Visible=false).

Wenn ich nochmal auf den Button gehe, und das UserControl ein zweites mal ins Panel lade, dann sind auch die Scrollbars da.

Was mach ich denn da falsch?

Hat jemand ne Idee?

Ich möchte softwaregesteuert in einem Panel Ansichten umschalten.

Geschrieben
Ohne Code ist es fast unmöglich zu sagen wo der Fehler ist. Würde sagen beim ersten Initialisieren machst irgendwas falsch :)

Ich mach m.E. nix anderes, als der Designer.

Hier der Code:


	public partial class Form1 : Form

	{

		UserControl1 c1, c2;


		public Form1()

		{

			InitializeComponent();


			this.SuspendLayout();

			panel1.SuspendLayout();

			this.c1 = new UserControl1();

			this.c1.Location = new System.Drawing.Point(4, 4);

			this.c1.Name = "userControlc1";

			this.c1.Size = new System.Drawing.Size(150, 150);

			this.c1.TabIndex = 0;

			this.c2 = new UserControl1();

			this.c2.Location = new System.Drawing.Point(4, 4);

			this.c2.Name = "userControlc1";

			this.c2.Size = new System.Drawing.Size(150, 150);

			this.c2.TabIndex = 0;

			panel1.ResumeLayout(false);

			this.ResumeLayout(false);

		}


		private void button1_Click(object sender, EventArgs e)

		{

			this.SuspendLayout();

			panel1.SuspendLayout();

			panel1.Controls.Clear();

			panel1.Controls.Add(c1);

			panel1.ResumeLayout(false);

			this.ResumeLayout(false);

		}


		private void button2_Click(object sender, EventArgs e)

		{

			this.SuspendLayout();

			panel1.SuspendLayout();

			panel1.Controls.Clear();

			panel1.Controls.Add(c2);

			panel1.ResumeLayout(false);

			this.ResumeLayout(false);

		}

	}

UserControl1 ist ein normales UserControl mit einem Panel in dem AutoScrollMinSize auf 800*600 gesetzt ist.

Geschrieben (bearbeitet)

Also was mir auffällt:

1. Wieso zeichnest du die komplette Form neu? Wenn dein Usercontrol im Panel ist reicht es wenn du das neu zeichnest.

2. Dann rufst du 2 mal ResumeLayout auf dein Panel auf. Versuch mal nur ResumeLayout(true) und entfern das andere.

Edit: Hast du zufaellig editiert? Meine vorher sah es anders aus.

Bearbeitet von trollr
Geschrieben

Sonst hab ichs immer so gemacht:

	

public partial class Form1 : Form

	{

		UserControl1 c1, c2;


		public Form1()

		{

			InitializeComponent();


			this.c1 = new UserControl1();

			this.c1.Location = new System.Drawing.Point(4, 4);

			this.c1.Name = "userControlc1";

			this.c1.Size = new System.Drawing.Size(150, 150);

			this.c1.TabIndex = 0;

			this.c2 = new UserControl1();

			this.c2.Location = new System.Drawing.Point(4, 4);

			this.c2.Name = "userControlc1";

			this.c2.Size = new System.Drawing.Size(150, 150);

			this.c2.TabIndex = 0;

		}


		private void button1_Click(object sender, EventArgs e)

		{

			panel1.Controls.Clear();

			panel1.Controls.Add(c1);

		}


		private void button2_Click(object sender, EventArgs e)

		{

			panel1.Controls.Clear();

			panel1.Controls.Add(c2);

		}

	}

damit sind die Scrollbars aber nur beim zweiten Anklicken des jeweiligen Buttons da.

Geschrieben

Ich versteh das nicht:

wenn ich das UserControl im Konstruktor hinzufüge, sind die Scrollbars da.


		public Form1()

		{

			InitializeComponent();


			this.c1 = new UserControl1();

			this.c1.Location = new System.Drawing.Point(4, 4);

			this.c1.Name = "userControlc1";

			this.c1.Size = new System.Drawing.Size(150, 150);

			this.c1.TabIndex = 0;

			panel1.Controls.Add(c1);

		}


		private void button1_Click(object sender, EventArgs e)

		{

			//panel1.Controls.Add(c1);

		}

Mach ich das im Button_Click-Ereignis, sind die Scrollbars nach Betätigen des Buttons nicht vorhanden.

		public Form1()

		{

			InitializeComponent();


			this.c1 = new UserControl1();

			this.c1.Location = new System.Drawing.Point(4, 4);

			this.c1.Name = "userControlc1";

			this.c1.Size = new System.Drawing.Size(150, 150);

			this.c1.TabIndex = 0;

			//panel1.Controls.Add(c1);

		}


		private void button1_Click(object sender, EventArgs e)

		{

			panel1.Controls.Add(c1);

		}

Das UserControl prinzipiell ist aber da, ich sehe den Button den das enthält. Nur eben die Scrollbars fehlen.

Kann vielleicht mal jemand testen, ob das ein generelles Problem ist?

Ich hab das schon an zwei Rechnern festgestellt.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...