2009-09-03 11 views
9

Mam WinForm zawierający bindingNavigator na górze i splitContainer z dwoma poziomymi panelami poniżej. SplitContainer wypełnia przestrzeń nie zajmowaną przez bindingNavigator.Naprawiono wysokość panelu w SplitContainer

Chciałbym ustawić dolny panel na stałą wysokość, powiedzmy 100 pikseli, i wypełnić górny panel resztą przestrzeni.

To jest mój bieżący kod:

kundeteamSplitContainer.SplitterDistance = kundeteamSplitContainer.Height - 100; 

bym pomyślał, że to ustawić odległość splitter dynamicznie do 100 pikseli mniej niż całkowita wysokość w każdym czasie, dzięki czemu panel dolny zajmują pozostałe 100 piksele. Nie działa to jednak zgodnie z zamierzeniami, ponieważ dolny panel zmienia rozmiar, gdy ponownie zmieniam rozmiar formularza w czasie wykonywania.

EDYCJA: Trzymam się z splitContainer, jeśli w ogóle możliwe. Mam kilka funkcji związanych z ukrywaniem/wyświetlaniem dolnego panelu już zaimplementowanego i nie chcę ponownie wykonywać tej pracy.

Odpowiedz

17

Jak zauważył Lee:

Ustaw właściwość do panelu ma pozostać taki sam rozmiar FixedPanel.

Działa to tak:

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

Używam TableLayoutControl do czegoś takiego zamiast Splittera.

+0

Cóż .. to może równie dobrze być, ale nie zmieniam się w tym momencie. Bardziej doświadczeni koledzy powiedzieli mi, żebym użył splittera, więc na razie się do tego przyzwyczaję. – Sakkle

+0

Wystarczająco fair. Używałem tylko wersji VS2005 i stwierdziłem, że jest zbyt niepoprawna. – MartW

+0

@Skle: Ale jeśli jedynym wymaganiem jest zachowanie kodu ukrywającego panel, możesz ustawić wysokość wiersza TableLayoutPanel na 0 i będzie działać prawie tak samo ... –

26

Ustaw właściwość FixedPanel na panel, który ma pozostać taki sam rozmiar.

+0

Dzięki ... to postawiło mnie na właściwej drodze – Sakkle

0

Jeśli chcesz tylko pokazać i wyłączyć panel (bez automatycznej zmiany rozmiaru nie Resize przez użytkownika) dodać do kodu przez Sakkle tej linii:

teamSplitContainer.IsSplitterFixed = true; 
2

Najlepszy sposób można ustawić isSplitterFixed obiekt do "True"

Property Window for splitcontainer