2012-05-08 62 views
5

Mam panel z dwoma kontrolkami w środku. Szkoda, że ​​nie zostały przyklejone do granicy panelu (panel ma pewną szerokość i wysokość, które nie mogą być zmienione), ale mają możliwość zmiany wielkości przestrzeni, którą one (kontrolki) pobierają z panelu w kierunku pionowym.Formy C# win sprawiają, że kontrolki są skalowalne

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

Dwa widoki listy są umieszczane jeden po drugim (pionowo). Chciałbym mieć możliwość "zmiany ich wysokości" (wybierając granicę między nimi, aby zmienić rozmiar).

Mam nadzieję, że rozumiesz, co mam na myśli. Dzięki za pomoc z góry.

+2

Zasadniczo chcesz mieć możliwość zmiany obszaru, który każdy widok listy zajmuje wewnątrz jego kontenera nadrzędnego, ale czy mają one wspólną granicę, aby jedna z nich powiększyła się, aby zająć pozostałe miejsce? (tylko dla jasności dla innych użytkowników) – RhysW

+0

Możesz spojrzeć na (na przykład) w formancie TableLayoutPanel w WinForm. Możesz go użyć do stworzenia siatki. Link: http://msdn.microsoft.com/en-us/library/h21wykkx.aspx i http://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx – Styxxy

+0

chcesz pozwolić użytkownikom ręcznie zmienić rozmiar kontrolek, przeciągając krawędzie? – nawfal

Odpowiedz

1

Czy można uznać za pomocą kotwicy na 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

Ustaw właściwość doc górnej na górę. Dodaj pasek podziału z orientacją pionową w tym samym pojemniku (panelu). Ustaw dolną właściwość Dock do wypełnienia. Jednym ze sposobów robienia tego w każdym razie.

2

Zgadzam się z Paulem, że SplitContainer jest tym, czego szukasz. Dodam, że musisz ustawić właściwości Dock i Anchor elementów sterujących umieszczonych w podzielonym kontenerze. Jeśli ustawisz właściwość Dock kontroli podrzędnej na Fill, zostanie ona rozwinięta w celu wypełnienia całego kontenera, niezależnie od rozmiaru panelu. Właściwość Anchor jest używana, jeśli w panelu jest wiele elementów sterujących. W takim przypadku należy ustawić właściwość kontroli podrzędnej Anchor, aby poinformować dziecko, które strony "przyklejają się" do strony pojemnika. Zobacz this page, aby uzyskać bardziej kompleksowy przegląd tych dwóch właściwości.

Należy również ustawić właściwości Dock lub Anchor na samym sterowaniu SplitContainer. To spowoduje zmianę rozmiaru po zmianie rozmiaru formularza. Następnie ustawienie właściwości Anchor/Dock na elementach sterujących podrzędnych wewnątrz SplitContainer spowoduje, że formanty podrzędne zmienią rozmiar w miarę zmiany wielkości kontenera.

Powiązane problemy