1

我在 FlowLayoutPanel 上遇到了很多困难。

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

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

表单设置为最大化运行,因此当我运行应用程序时默认会发生第一次调整大小 - 此时,FLP 及其控件不会调整大小,除非我在 Form_Layout 事件处理程序中专门告诉他们这样做。

问题是,无论我在该事件处理程序中尝试的 Size 更改、Anchors、Docks 的组合如何,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 的调整大小行为。

4

2 回答 2

4

如果 FLP 仅包含一个控件,则使用 FLP 毫无意义。它的工作是在其中流动控制,如果只有一个,就没有流动。

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

于 2010-09-12T13:00:13.143 回答
2

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

要确保正确的停靠行为,请选择停靠在顶部或底部的控件之一,然后说将它们发送到后台。然后选择另一个控件并执行相同的操作。通常这可以解决这类问题。

就像一个有趣的问题,为什么您使用流布局来呈现单个标签页,将 tabControl 直接放在您的表单上并将 Dock 设置为 Fill 不是更好吗?

于 2010-09-12T12:33:38.727 回答