Проблемы FlowLayoutPanel - PullRequest
       14

Проблемы FlowLayoutPanel

1 голос
/ 12 сентября 2010

Мне очень трудно работать с FlowLayoutPanel.

У меня есть приложение Winforms с FLP (FlowLayoutPanel) с одним дочерним элементом управления - tabControl (с веб-браузером в нем).Форма также имеет закрепленную вверху TableLayoutPanel, а внизу закреплена еще одна TableLayoutPanel.Поэтому я намерен заполнить пространство между этими TLP с помощью FlowLayoutPanel.Все элементы управления добавляются в форму в режиме конструктора.

Что мне нужно - когда я изменяю размер формы, FLP должен соответствующим образом изменять ее размер, заполняя форму, и tabControl должен также заполнять FLP.

Форма настроена на максимальный запуск, поэтому первое изменение размера происходит по умолчанию, когда я запускаю приложение - в этот момент FLP и его элемент управления не изменяют размер, если я специально не сообщу им об этом вОбработчик события Form_Layout.

Проблема в том, что независимо от того, какую комбинацию изменений размера, якоря, дока я пытаюсь использовать в этом обработчике событий, всегда верхняя или нижняя часть tabControl находится вне области формы, и я не вижуполная полоса прокрутки веб-браузера в нем;таким образом, элемент управления вкладками не закреплен должным образом внутри FLP (или FLP не закреплен в форме), даже если я скажу, что это так.Вот код Form_layout:

private void MyForm_Layout(object sender, LayoutEventArgs e)
{
    //resize FLP
    pnlMainFlowLayout.Size = this.Size - new Size(15, 0);
    pnlMainFlowLayout.Dock = DockStyle.Fill;
    pnlMainFlowLayout.BringToFront();

    //resize child control of FLP
    tabControl.Size = pnlMainFlowLayout.Size;
    tabControl.BringToFront();
}

Мне действительно нужно понять поведение изменения размера FlowLayoutPanel.

Ответы [ 2 ]

4 голосов
/ 12 сентября 2010

Нет смысла использовать FLP, если он содержит только один элемент управления.Его работа состоит в том, чтобы передавать элементы управления внутри него, ничего не передавая, если есть только один.

Используйте TabControl как есть, установите для его свойства Dock значение Fill.Если это перекрывает один из TLP, щелкните правой кнопкой мыши TLP и нажмите «Отправить назад».

2 голосов
/ 12 сентября 2010

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

Чтобы обеспечить правильное поведение при стыковке, выберите один из элементов управления, закрепленных сверху или снизу, и скажите, что отправляете их в фоновый режим.Затем выберите другой элемент управления и сделайте то же самое.Обычно это решает подобные проблемы.

Точно так же, как вопрос, почему вы используете макет потока для визуализации одной вкладки, не лучше ли поместить tabControl непосредственно в форму и установитьДок для заполнения?

...