steinadler Geschrieben 4. Januar 2012 Geschrieben 4. Januar 2012 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. Zitieren
trollr Geschrieben 4. Januar 2012 Geschrieben 4. Januar 2012 Ohne Code ist es fast unmöglich zu sagen wo der Fehler ist. Würde sagen beim ersten Initialisieren machst irgendwas falsch Zitieren
steinadler Geschrieben 4. Januar 2012 Autor Geschrieben 4. Januar 2012 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. Zitieren
trollr Geschrieben 4. Januar 2012 Geschrieben 4. Januar 2012 (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 4. Januar 2012 von trollr Zitieren
steinadler Geschrieben 4. Januar 2012 Autor Geschrieben 4. Januar 2012 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. Zitieren
steinadler Geschrieben 5. Januar 2012 Autor Geschrieben 5. Januar 2012 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. Zitieren
Empfohlene Beiträge
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.