drei Panels Layout auf Formular [geschlossen]

8

Ich versuche ein Formularlayout zu erstellen, das folgende Anforderungen erfüllt:

  • panel1 ist eine feste Höhe - es wird nur ein Label enthalten, das eine Art Header mit Titel usw. ist.
  • panel2 enthält datagridview mit dockstyle fill, hier findet der Benutzer Objekte, die er auswählen kann, um seine Eigenschaften anzuzeigen
  • paneel3 ist eine feste Höhe - sie wird am unteren Rand des Formulars positioniert und enthält Eigenschaften des ausgewählten Objekts aus dem Datagridview

Mein Problem besteht darin, panel2 so zu machen, dass es den ganzen Platz füllt, der nach panel1 und panel3 übrig geblieben ist. Wenn also panel1 und panel3 beide eine feste Höhe von 100 haben und das Formular eine Höhe von 500 hat, dann sollte panel2 300 height haben, wenn form auf 600 skaliert wird, dann sollte panel2 auch die Größe von 400, etc. ändern.

Ich habe einige Dock-Kombinationen ausprobiert und versucht, panel1 dock als top, panel3 als bottom und panel2 als fill zu setzen, aber es gibt andere Ergebnisse als erwartet. Ich weiß, dass ich mit dem resize-Ereignis für das Formular umgehen und die Größe von panel2 auf eine Größe ändern kann, die übrig bleibt, aber ich frage mich, ob es eine elastischere und sauberere Methode dafür gibt.

    
Banzai 12.06.2013, 19:44
quelle

5 Antworten

6

Der Andockraum hängt mit der Reihenfolge der Objekte auf Ihrem Formular zusammen, wie im_a_noob erwähnt wurde. Sie können die Z-Reihenfolge des Objekts ändern, um zu ändern, wie sie andocken. Sie sollten in der Lage sein, mit der rechten Maustaste auf das Feld zu klicken, das den Raum in der Mitte füllen soll, und dann aus dem Menü "Nach vorne bringen" auszuwählen. Dadurch sollte es den Raum korrekt füllen und das ganze Formular hinter den anderen Panels.

Sie würden also Ihre obere Platte an die obere, die untere an die untere und dann die mittlere an "Fill" andocken. Dann rechtsklicken und den mittleren nach vorne bringen.

    
Tombala 12.06.2013, 19:56
quelle
4

Dies liegt an der Dokumentengliederung.

gehe zu

%Vor%

Vergewissern Sie sich, dass das Dock-Fill-Pannel (mittleres) das erste der drei Pannels in dieser Liste ist. Das sollte dich reparieren.

    
Rémi 12.06.2013 19:50
quelle
1

Es scheint, als wäre ein tableLayoutPanel hier eine gute Wahl. Auf diese Weise können Sie absolute Werte für Zeile 1 (Feld 1) und Zeile 3 (Feld 3) festlegen und dann 100% für die mittlere Zeile (Feld 2) verwenden, um sicherzustellen, dass der verbleibende Platz belegt wird, ohne den anderen zu überlappen Panels.

Sobald Sie Ihre Datagridview in die mittlere Zeile des tableLayoutPanel gesetzt haben, sollten Sie in der Lage sein, die Dock-Eigenschaft zu füllen und sie sollte korrekt funktionieren.

TableLayoutPanels ermöglichen nur das Platzieren eines Elements in einer Zelle. Sie können dies jedoch umgehen, indem Sie ein Panel als Hauptelement hinzufügen und dann alles in diesem Panel konfigurieren.

    
nahammel 12.06.2013 20:22
quelle
0

Setzen Sie die panel1-Anker einfach oben, links, rechts; Anker der Platte 2 oben, unten, links, rechts; Platte 3 Anker unten, links, rechts. Dadurch wird sichergestellt, dass die obere Platte an Ort und Stelle bleibt, die untere bewegt sich mit dem Fenster nach unten und die Mitte wird dazwischen erweitert.

    
PeterG 12.06.2013 19:57
quelle
0

Zuerst die Panels 1 und 3 (Panel 1 nach Top, Panel 3 nach unten):

Sobald diese beiden Einstellungen vorgenommen wurden, wählen Sie Panel 2 und setzen es auf Fill:

UPDATE:

Hier ist ein kurzer Code, den ich gemacht habe, um zu überprüfen, ob Ihre Panels in der richtigen Reihenfolge in Ihrem Code sind:

%Vor%     
jp2code 12.06.2013 19:59
quelle

Tags und Links