2012-05-08 10 views
5

Ho un pannello con due controlli interni. Vorrei che fossero incollati al bordo del pannello (il pannello ha una larghezza e un'altezza che non può essere cambiata) ma hanno la possibilità di ridimensionare la quantità di spazio che i (controlli) ottengono dal pannello in direzione verticale.C# forme di vincita per rendere ridimensionabili i controlli

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

Due elenchi vengono posizionati uno dopo l'altro (in verticale). Desidero avere la possibilità di "cambiare altezza" di loro (scegliendo il confine tra di loro per ridimensionare).

Spero tu abbia capito cosa intendo. Grazie per l'aiuto in anticipo.

+2

In sostanza, si desidera poter modificare l'area che ogni listview occupa all'interno del contenitore padre, ma farli condividere un bordo in modo che, man mano che si cresce, l'altro si restringa per occupare lo spazio rimanente? (solo per chiarezza per altri utenti) – RhysW

+0

È possibile guardare (ad esempio) al controllo TableLayoutPanel in WinForms. Puoi usarlo per creare un qualche tipo di griglia. Link: http://msdn.microsoft.com/en-us/library/h21wykkx.aspx e http://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx – Styxxy

+0

fai vuoi consentire agli utenti di modificare manualmente la dimensione dei controlli, trascinando i bordi? – nawfal

risposta

1

Hai pensato di usare ancoraggio sul 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

Impostare la proprietà doc di quella in alto. Aggiungere una barra di divisione con orientamento verticale nello stesso contenitore (pannello). Imposta la proprietà del Dock in basso da riempire. Un modo di farlo comunque.

2

Sono d'accordo con Paul sul fatto che lo SplitContainer è quello che stai cercando. Vorrei aggiungere che è necessario impostare le proprietà Dock e Anchor dei controlli inseriti all'interno del contenitore split. Se si imposta la proprietà Dock del controllo figlio su Fill, essa si espande per riempire l'intero contenitore, indipendentemente da come viene ridimensionato il pannello. La proprietà Anchor viene utilizzata se nel pannello sono presenti più controlli. In tal caso, si imposta la proprietà Anchor del controllo figlio per comunicare al controllo figlio quali lati "si attaccano" al lato del contenitore. Vedi this page per un look più completo su queste due proprietà.

Inoltre, è possibile impostare le proprietà Dock o Anchor sul controllo SplitContainer stesso. Ciò lo ridimensiona quando il modulo viene ridimensionato. Quindi l'impostazione delle proprietà Anchor/Dock nei controlli figlio all'interno di SplitContainer causerà il ridimensionamento dei controlli secondari man mano che il contenitore viene ridimensionato.

Problemi correlati