2012-05-08 27 views
5

Tengo un panel con dos controles en el interior. Desearía que estuvieran pegados al borde del panel (el panel tiene un ancho y una altura que no se pueden cambiar), pero tienen la posibilidad de cambiar el tamaño de la cantidad de espacio que ellos (controles) obtienen del panel en dirección vertical.C# win formularios make controls redimensionable

panel.Controls.Add(listview1); 
panel.Controls.Add(listview2); 

Dos listas de vista se colocan una detrás de otra (verticalmente). Deseo tener la posibilidad de "cambiar la altura" de ellos (eligiendo el borde entre ellos para cambiar el tamaño).

Espero que haya entendido lo que quiero decir. Gracias por la ayuda de antemano.

+2

Básicamente, ¿desea poder cambiar el área que ocupa cada vista de lista dentro de su contenedor padre pero que compartan un borde para que a medida que uno crece el otro se encoja para ocupar el espacio restante? (solo para mayor claridad para otros usuarios) – RhysW

+0

Puede ver (por ejemplo) en el control TableLayoutPanel en WinForms. Puedes usarlo para crear algún tipo de grilla. Enlace: http://msdn.microsoft.com/en-us/library/h21wykkx.aspx y http://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx – Styxxy

+0

¿usted ¿Quieres que los usuarios cambien manualmente el tamaño de los controles arrastrando los bordes? – nawfal

Respuesta

1

Ha considerado el uso de anclaje en la listviews?

 this.panel1 = new System.Windows.Forms.Panel(); 
     this.listView1 = new System.Windows.Forms.ListView(); 
     this.listView2 = new System.Windows.Forms.ListView(); 
     this.panel1.SuspendLayout(); 
     this.SuspendLayout(); 
     // 
     // panel1 
     // 
     this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
     | System.Windows.Forms.AnchorStyles.Left) 
     | System.Windows.Forms.AnchorStyles.Right))); 
     this.panel1.Controls.Add(this.listView2); 
     this.panel1.Controls.Add(this.listView1); 
     this.panel1.Location = new System.Drawing.Point(12, 12); 
     this.panel1.Name = "panel1"; 
     this.panel1.Size = new System.Drawing.Size(413, 280); 
     this.panel1.TabIndex = 0; 
     // 
     // listView1 
     // 
     this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
     | System.Windows.Forms.AnchorStyles.Right))); 
     this.listView1.Location = new System.Drawing.Point(3, 0); 
     this.listView1.Name = "listView1"; 
     this.listView1.Size = new System.Drawing.Size(410, 97); 
     this.listView1.TabIndex = 0; 
     this.listView1.UseCompatibleStateImageBehavior = false; 
     // 
     // listView2 
     // 
     this.listView2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
     | System.Windows.Forms.AnchorStyles.Right))); 
     this.listView2.Location = new System.Drawing.Point(0, 183); 
     this.listView2.Name = "listView2"; 
     this.listView2.Size = new System.Drawing.Size(410, 97); 
     this.listView2.TabIndex = 1; 
     this.listView2.UseCompatibleStateImageBehavior = false; 
     // 
     // Form1 
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.ClientSize = new System.Drawing.Size(437, 304); 
     this.Controls.Add(this.panel1); 
     this.Name = "Form1"; 
     this.Text = "Form1"; 
     this.panel1.ResumeLayout(false); 
     this.ResumeLayout(false); 
2

Establezca la propiedad doc de la superior a la superior. Agregue una barra separadora con orientación vertical en el mismo contenedor (panel). Establezca la propiedad del Dock inferior para llenar. Una forma de hacerlo de todos modos.

2

Estoy de acuerdo con Paul en que el SplitContainer es lo que está buscando. Añadiría que necesita establecer las propiedades de Dock y Anchor de los controles que coloca dentro del contenedor dividido. Si configura la propiedad Dock de un control secundario en Fill, se expandirá para llenar todo el contenedor, independientemente de cómo se dimensione el panel. La propiedad Anchor se usa si hay múltiples controles en el panel. En ese caso, establezca la propiedad Anchor del control secundario para decirle al niño control qué lados se "pegan" al costado del contenedor. Vea this page para una vista más completa de esas dos propiedades.

Además, querrá establecer las propiedades Dock o Anchor en el control SplitContainer. Eso hará que cambie de tamaño cuando la forma cambie de tamaño. A continuación, establecer las propiedades Anchor/Dock en los controles secundarios dentro de SplitContainer hará que los controles secundarios cambien de tamaño a medida que el contenedor cambia el tamaño.