2009-09-03 2 views
9

Ich habe eine WinForm mit einem BindingNavigator oben und einem SplitContainer mit zwei horizontalen Panels darunter. Der splitContainer füllt den nicht vom bindingNavigator belegten Speicherplatz.Fixed Panel Height in einem SplitContainer

Ich möchte das untere Bedienfeld auf eine feste Höhe von etwa 100 Pixel setzen und die obere Platte füllen den Rest des Raumes.

Dies ist mein aktueller Code:

kundeteamSplitContainer.SplitterDistance = kundeteamSplitContainer.Height - 100; 

Ich habe gedacht, dass diese den Splitter Abstand dynamisch auf 100 Pixel weniger als die Gesamthöhe jederzeit, so dass die Bodenplatte belegen die restlichen 100 gesetzt würden Pixel. Dies funktioniert jedoch nicht wie vorgesehen, da das untere Feld die Größe ändert, wenn ich das Formular zur Laufzeit neu skaliere.

EDIT: Ich halte mit dem SplitContainer wenn überhaupt möglich. Habe eine Reihe von Funktionen zum Verstecken/Anzeigen der bereits implementierten unteren Leiste und ich möchte das nicht noch einmal machen.

Antwort

17

Wie bereits von Lee aus:

Stellen Sie die FixedPanel Eigenschaft auf das Panel Sie die gleiche Größe bleiben wollen.

Dies funktioniert wie folgt:

teamSplitContainer.SplitterDistance = teamSplitContainer.Height - 100; 
teamSplitContainer.FixedPanel = FixedPanel.Panel2; 
2

Ich würde ein TableLayoutControl für so etwas wie einen Splitter verwenden.

+0

Nun .. das kann sehr gut sein, aber ich ändere nicht an dieser Stelle. Meine erfahreneren Kollegen haben mir gesagt, dass ich einen Splitter benutzen soll, also bleibe ich vorerst dran. – Sakkle

+0

Fair genug. Ich habe nur die Version VS2005 verwendet und fand es ein wenig zu fehlerhaft. – MartW

+0

@Sakkle: Aber wenn die einzige Anforderung ist, den Code zum Ausblenden des Panels beizubehalten, kannst du die Zeilenhöhe des TableLayoutPanels auf 0 setzen und es würde genauso funktionieren ... –

26

Setzen Sie die Eigenschaft FixedPanel auf das Feld, das dieselbe Größe haben soll.

+0

Danke ... das brachte mich auf den richtigen Weg – Sakkle

0

Wenn Sie nur das Panel (keine automatische Größenanpassung, kein Resize durch den Benutzer) zeigen, und deaktivieren Sie hinzufügen, um den Code von Sakkle diese Zeile:

teamSplitContainer.IsSplitterFixed = true; 
2

Der beste Weg, können Sie isSplitterFixed Eigenschaft auf "True"

Property Window for splitcontainer

gesetzt