FlowLayoutPanel问题

时间:2010-09-12 11:52:16

标签: c# resize flowlayoutpanel

我在使用FlowLayoutPanel时非常困难。

我有一个带有一个子控件的FLP(FlowLayoutPanel)的Winforms应用程序 - 一个tabControl(其中包含一个webBrowser)。 该表单还有一个停靠在顶部的TableLayoutPanel,另一个停靠在底部的TableLayoutPanel。所以我的目的是用FlowLayoutPanel填充这些TLP之间的空间。 所有控件都将在设计视图中添加到表单中。

我需要什么 - 当我调整表单大小时,FLP应该很好地调整它,填充表单,tabControl也应该填充FLP。

表单设置为最大化运行,因此默认情况下,当我运行应用程序时会发生第一次调整大小 - 此时,FLP及其控件不会调整大小,除非我在Form_Layout事件处理程序中专门执行此操作。

问题在于,无论我在该事件处理程序中尝试的大小更改,锚点,码头的组合如何,总是tabControl的顶部或底部部分超出表单区域,我看不到完整的滚动条其中的webbrowser;因此,即使我告诉它,选项卡控件也没有正确停靠在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 个答案:

答案 0 :(得分:4)

如果FLP只包含一个控件,则没有意义。它的工作是将控件内部流动,如果只有一个控件,则无需流动。

按原样使用TabControl,将其Dock属性设置为Fill。如果这使得它与其中一个TLP重叠,则右键单击TLP并单击“Send To Back”。

答案 1 :(得分:2)

使用停靠时,将控件添加到父级的顺序非常重要。首先添加的控件具有更高的优先级。这个优先级可能会导致您描述的效果。

要确保正确的对接行为,请选择停靠在顶部或底部的其中一个控件,然后将其发送到后台。然后选择其他控件并执行相同操作。通常这可以解决这些问题。

感兴趣的是,为什么使用流布局来呈现单个标签页,将tabControl直接放在窗体上并将Dock设置为Fill不是更好吗?