我在用FlowLayoutPanel的时候真的很艰难。
我有一个Winforms应用程序,它有一个带一个子控件的FLP(FlowLayoutPanel) -一个tabControl(里面有一个webBrowser )。窗体顶部还有一个停靠的TableLayoutPanel,底部还有另一个TableLayoutPanel。所以我的目的是用FlowLayoutPanel来填补这些TLP之间的空白。所有控件都将添加到“设计”视图中的窗体中。
我需要什么-当我调整表单大小时,FLP应该很好地调整大小,填写表单,tabControl也应该填充FLP。
窗体被设置为最大化运行,所以当我运行应用程序时,默认情况下会发生第一次大小调整-在这一点上,FLP和它的控件不会调整大小,除非我在Form_Layout事件处理程序中明确告诉它们这样做。
问题是,无论我在事件处理程序中尝试什么大小更改、锚点、Dock组合,tabControl的顶部或底部总是在表单区域之外,并且我无法在其中看到see浏览器的完整滚动条;因此选项卡控件不能正确地停靠在tabControl内(或者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的大小调整行为。
发布于 2010-09-12 13:00:13
如果FLP只包含一个控件,那么使用FLP就没有意义。它的工作是在其中流动控件,如果只有一个控件,就没有什么要流动的。
按原样使用TabControl,将其Dock属性设置为Fill。如果使其与其中一个TLP重叠,则右键单击该TLP并单击“Send To Back”。
发布于 2010-09-12 12:33:39
使用停靠时,控件添加到父级的顺序很重要。首先添加的控件具有较高的优先级。此优先级可能会导致您所描述的效果。
为了确保正确的停靠行为,选择一个停靠在顶部或底部的控件,然后说将它们发送到后台。然后选择另一个控件并执行相同的操作。通常这解决了这类问题。
有趣的是,为什么要使用flow布局来呈现单个选项卡页面,将tabControl直接放在表单上并将Dock设置为Fill不是更好吗?
https://stackoverflow.com/questions/3694717
复制相似问题