2013-04-19 2 views
3

У меня есть следующий код, чтобы установить ширину первой панели в нужную мне ширину (по какой-то причине мне нужно разделить ожидаемое на два, чтобы получить фактическую ширину, чтобы быть моим expectedWith - не знаю почему).FixedPanel в SplitContainer вызывает незнание размера

splitContainer1.SplitterDistance = expectedWith/2; 

Следующая вещь, которую мне нужно, что первая панель фиксируется, означает, что при изменении размеров окна, только второй панели становится больше, а первый остается в размере. Для достижения этой цели я использую следующую строку:

splitContainer1.FixedPanel = FixedPanel.Panel1; 

проблема сейчас: кажется, что FixedPanel-свойство укомплектовать игнорирует размер первой панели. Не имеет значения, какое значение я задал для свойства SplitterDistance, если бы я использовал строку FixedPanel. Это всегда одно и то же. Это даже не имеет значения, если я устанавливаю SplitterDistance в конструкторе форм.

Есть ли решение для этого?

+0

Это невозможно сделать. Я получаю исключение NotSupportedException, где говорится, что вместо этого я должен использовать SplitterDistance. –

+0

Я только что попробовал это, и я не вижу проблемы. Независимо от того, в каком порядке я устанавливаю/снимаю различные свойства, все работает нормально. Какова ваша проблема? –

+1

Ничего себе, ты прав. Проблема возникает только в том случае, если содержимое Panel1 использует .Dock = DockStyle.Fill. Сумасшедшие вещи ... Я с нетерпением жду, как это решить. –

ответ

4

Я могу ответить на свой вопрос. Это происходит только в том случае, если содержимое соответствующей панели использует DockStyle.Fill в свой Dock-свойство. Решение - установить значение DockStyle.Fill сразу после установки FixedPanel. Это также отвечало за «разделение на два», объясняемое в вопросе.

Благодаря Джону Виллемсе.

+0

Какую версию Framework вы используете (были)? Потому что я не смог воспроизвести проблему, и я пробовал как 2.0, так и 3.5 ... (Хотя я только пробовал только один ярлык внутри Panel1, если это имеет какое-то значение.) –

0

Поскольку вы хотите только фиксированную первую панель и динамическую вторую, не могли бы вы использовать TableLayoutPanel вместо SplitContainer?

+0

№ Пользователь должен уметь измените размер панели вручную. Но я хочу избежать того, что он автоматически изменяет размер, например, когда максимизируется форма. –

0

DockStyle.None - это шаг в правильном направлении. Но ему нужны 3-6 итераций (встряхивание Splitter), пока у Panel-Window не будет ожидаемых размеров. Странный!

0

Я столкнулся с этой же проблемой и искушался использовать совет оригинального плаката и просто делить желаемое SplitterDistance на два, как это всегда казалось (почти, но не точно) в два раза больше ширины, о которой я просил.

Я попытался изменить DockStyle детей двух панелей на None перед установкой SplitterDistance, но в моем случае это не оказало никакого влияния на проблему.

Я решил проблему, изменив настройку SplitterDistance. Первоначально я устанавливал SplitterDistance на панели перед вызовом Form.Show(). Установка SplitterDistance после показа формы показала, что вылечила ее.

0

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

Чтобы исправить это, вы можете изменить свойство «FixedPanel» с «None» на панель 1 или панель2. Это зависит от вас. это действительно реально вступает в игру, когда минимальная настройка не является достаточно маленькой и/или когда у вас есть разделитель контейнера внутри другого значимого контейнера. фиксированная панель остается фиксированной. Обе панели могут быть изменены по мере выбора с помощью мыши, хотя слово фиксированное в этом отношении немного неоднозначно.

так что возьмите время управления временем. поместите его в форму. измените его в соответствии с вашими требованиями и привяжите его по мере необходимости. ничего другого, кроме того, что одна из панелей фиксирована. Существует свойство, называемое «IsSplitterFixed», не трогайте его, это одна из причин, по которым этот элемент управления становится нестабильным и он должен оставаться ложным, свойства panel.minsize должны устанавливаться во время разработки на основе требований, и вам всегда нужно осознавать их значений.

жить долго и счастливо!

Смежные вопросы