Фиксированная высота панели в SplitContainer

У меня есть WinForm, содержащий bindingNavigator вверху и splitContainer с двумя горизонтальными панелями под ним. SplitContainer заполняет пространство, не занятое bindingNavigator.

Я хотел бы установить фиксированную высоту нижней панели, скажем, 100 пикселей, а верхняя панель заполнила остальное пространство.

Это мой текущий код:

kundeteamSplitContainer.SplitterDistance = kundeteamSplitContainer.Height - 100;

Я бы подумал, что это установит динамическое расстояние разделителя на 100 пикселей меньше общей высоты в любое время, заставляя нижнюю панель занимать оставшиеся 100 пикселей. Это не работает должным образом, поскольку нижняя панель постоянно меняет размер, когда я изменяю размер формы во время выполнения.

РЕДАКТИРОВАТЬ: Я придерживаюсь splitContainer, если это вообще возможно. У меня есть множество функций, связанных с скрытием / отображением нижней панели, уже реализованной, и я не хочу делать эту работу снова.


person Sakkle    schedule 03.09.2009    source источник


Ответы (5)


Установите FixedPanel для панели, размер которой вы хотите сохранить.

person Lee    schedule 03.09.2009

Как указал Ли:

Установите FixedPanel для панели, размер которой вы хотите сохранить.

Это работает так:

teamSplitContainer.SplitterDistance = teamSplitContainer.Height - 100;
teamSplitContainer.FixedPanel = FixedPanel.Panel2;
person Sakkle    schedule 03.09.2009

Лучший способ установить для свойства isSplitterFixed значение "True"

Окно свойств для splitcontainer

person Sachith    schedule 15.09.2016

Я бы использовал TableLayoutControl для чего-то вроде этого, а не Splitter.

person MartW    schedule 03.09.2009
comment
Что ж ... это вполне может быть, но я не собираюсь меняться на данном этапе. Мои более опытные коллеги посоветовали мне использовать разветвитель, поэтому я пока буду придерживаться его. - person Sakkle; 03.09.2009
comment
Справедливо. Я использовал только версию VS2005 и нашел ее слишком глючной. - person MartW; 03.09.2009
comment
@Sakkle: Но если единственное требование - сохранить код, скрывающий панель, вы можете установить высоту строки TableLayoutPanel равной 0, и она будет работать примерно так же ... - person C.B.; 27.05.2013

Если вы хотите только показать и отключить панель (без автоматического изменения размера, без изменения размера пользователем), добавьте в код Sakkle эту строку:

teamSplitContainer.IsSplitterFixed = true;
person Julo    schedule 09.01.2014