19. januar 2008 - 22:38
Der er
9 kommentarer
Opdatering af paneler
Jeg har to paneler, hvor det ene ligger i bunden af min form (panel2) og det andet i siden af min form (panel1) og ønsker at gøre panel1 visible (true/false) afhængigt af hvor stor min form er. Det er gjort på nedenstående måde: ***** Kode public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void test() { if(this.panel2.Width > 450) this.panel1.Visible = false; else this.panel1.Visible = true; } protected override void OnLayout(LayoutEventArgs e) { base.OnLayout(e); listBox1.Items.Add("Horizontal" + panel2.Width); listBox1.Items.Add("Vertical" + panel1.Height); test(); } } ***** End Kode Det virker også ved resize, men ved klik på minimize/maximize eller dobbeltklik på øverste bjælke i min form så fjernes panel1, men bliver altid visible igen før jeg laver en resize. Hvorledes kan jeg løse dette?
Annonceindlæg fra Computerworld it-jobbank
19. januar 2008 - 23:46
#1
Layout måske kaldes inden der er tegnet på skærmen, så der er størrelserne i test evt. = 0. Skriv evt width ud i en Console, så du kan se dens værdi. Måske indeholder Size noget du kan bruge Brug evt. OnPaint, der er muligvis kommet nogen størrelser i Width på panelerne
20. januar 2008 - 10:18
#2
Hmm, jeg har forsøgt at skrive både Height og Width ud på mit panel1 og kan se det ikke opdateres ved minimize/maximize. Andre ideer?
20. januar 2008 - 22:02
#3
Din løsning virker som du ønker hvis jeg laver det. Prøv at tilføje Invalidate(); nederst i din test() metode
20. januar 2008 - 22:27
#4
Det virker stadig ikke hos mig. Har du mulighed for at vise hvordan? Tak
21. januar 2008 - 08:40
#5
Jeg lavede et nyt projekt og tilføjede 2 paneler og din kode. Dog fjernede jeg listBox1.Items.Add("Horizontal" + panel2.Width); listBox1.Items.Add("Vertical" + panel1.Height); Da jeg ikke mente at det havde relevans for problemet. Men det virker som du har beskrevet det skulle. Med Invalidate(); tvinger du applikationen til at tegne formen og så bør dine paneler vises i henhold til betingelserne. private void test() { if(this.panel2.Width > 450) this.panel1.Visible = false; else this.panel1.Visible = true; Invalidate(); }
21. januar 2008 - 08:54
#6
Kan du ikke sende koden for din designer?
21. januar 2008 - 09:36
#7
Kode til formen using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace LayoutTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void test() { if( this.panel2.Width > 450 ) this.panel1.Visible = false; else this.panel1.Visible = true; } protected override void OnLayout(LayoutEventArgs e) { base.OnLayout( e ); test(); } } } **************************************** Kode til designeren namespace LayoutTest { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if( disposing && (components != null) ) { components.Dispose(); } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // panel1 // this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel1.BackColor = System.Drawing.SystemColors.ControlDarkDark; this.panel1.Location = new System.Drawing.Point( 13, 20 ); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size( 266, 117 ); this.panel1.TabIndex = 0; // // panel2 // this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel2.BackColor = System.Drawing.SystemColors.ControlDark; this.panel2.Location = new System.Drawing.Point( 15, 151 ); this.panel2.Name = "panel2"; this.panel2.Size = new System.Drawing.Size( 263, 105 ); this.panel2.TabIndex = 1; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 13F ); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size( 292, 266 ); this.Controls.Add( this.panel2 ); this.Controls.Add( this.panel1 ); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout( false ); } #endregion private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Panel panel2; } }
21. januar 2008 - 18:33
#8
Det ser jo fint ud. Men jeg har docket mit ene panel til Bottom og det andet til Right. Her virker det ikke. Jeg har ikke mulighed for at tilføje og fjerne mit panel der er docket til Right. Kan du også klare den?
21. januar 2008 - 18:39
#9
Det virker faktisk ved at docke det ene panel til Bottom og det andet til Top. Men ikke det ene panel til Bottom og det andet til Right. Any idea?
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.