2010-02-01 2 views
1

A назад, я отправил this question о попытке получить flowlayoutpanel для правильной авторазработки при закреплении в верхней части контейнера. То, что я пытался выполнить, - установить горизонтальную (слева направо) flowlayoutpanel, охватывающую верхний край формы, и datagridview, занимающий остальную часть доступного пространства под панелью flowlayout. У меня возникла проблема с тем, чтобы свойство высоты flowlayoutpanel было автоматически настроено так, как должно было бы. Опубликованный ответ работал отлично для того, что я пытался выполнить, что было замечательно ...WinForms UserControl Layout Autosize Problems

Невозможно оставить достаточно достаточно одного, теперь я пытаюсь сделать еще один шаг и обернуть панель flowlayout в UserControl. Однако я обнаружил, что это приводит к тому, что flowlayoutpanel больше не изменяет его высоту.

Вот первый макет, который прекрасно работает:

FlowLayoutPanel1 (Autosize = true, Dock = Top) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

А вот с FlowLayoutPanel завернутые в UserControl:

UserControl (Autosize = true, Dock = Top) 
    FlowLayoutPanel1 (Autosizse = true, Dock = Fill) 
    ComboBox1 
    ComboBox2 
    ComboBox3 
DataGridView1 (Dock = Fill) 

по какой-либо причине, FlowLayoutPanel не изменяет размер ее высоту правильно когда форма изменяется. Это довольно легко воспроизвести. Кроме того, содержимое FlowLayoutPanel может быть чем угодно, а не только ComboBoxes.

ответ

1

Я думаю, что проблема в том, что у вас есть FlowLayoutPanel1.Dock = Fill, который переопределяет его попытку авторазмера высоты.

Возможно, исправление установлено FlowLayoutPanel1.Dock = Top (как и раньше), а затем обработайте событие FlowLayoutPanel1.Resize, чтобы изменить размер пользовательского элемента управления. По сути, вы вручную пытаетесь сохранить UserControl.Size в синхронизации с FlowLayoutPanel1.Size.

Там может быть умнее способ сделать это, но, надеюсь, это поможет вам на правильном пути ...

+0

Это почти работает. Событие Resize отлично работает, но мне нужно изменить размер формы, чтобы запустить событие Resize. Я бы хотел, чтобы эта настройка размера происходила, когда форма изначально показана, а не только после ее изменения. Я пробовал события UserControl.Load, Layout, VisibleChanged и Paint без каких-либо успехов. – echo

+2

Я замечаю, что есть событие FlowLayoutPanel.SizeChanged, может быть, дайте мне попробовать? Я не рядом с машиной с настройкой VS, поэтому я не могу играть с ней сам. Вы также можете попробовать событие FlowLayoutPanel.ControlAdded –

+0

SizeChanged сделал трюк. благодаря – echo

0

Установлен ли в вашем UserControl набор ширины? Посмотрите в designer.cs, чтобы быть уверенным. Если это произойдет, вам нужно будет сбросить это свойство.

+0

Ширина, кажется, работает хорошо, но высота остается неизменной. Когда дети flowlayoutpanel обертывают, чтобы сформировать новые линии, высота не увеличивается соответственно, а дети обрезаются по вертикали. – echo

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