【发布时间】:2013-12-30 10:59:04
【问题描述】:
首先我要说我没有做过很多 Windows 窗体开发——如果我可能犯了明显的错误,请不要犹豫,指出它。
重现我的问题的步骤:
- 使用 VS 2010 或 VS 2012 创建新的 C# Windows 窗体项目
- 使用 VS 表单设计器,将三个 FlowLayoutPanel 组件添加到表单中
- 将每个 FlowLayoutPanel 设置为与表单高度相同,宽度约为表单宽度的 1/3
调整每个 FlowLayoutPanel 的位置,使它们不会在水平方向上相互重叠,并共同占用表单的大约整个区域。
最左边的 FlowLayoutPanel 被配置为具有 Top、Bottom、Left 的 Anchor
- 中间的 FlowLayoutPanel 被配置为具有 Top, Bottom 的 Anchor
- 最右边的 FlowLayoutPanel 配置为具有 Top、Bottom、Right 的 Anchor
为 Form_Shown 添加一个事件:
private void Form1_Shown(object sender, EventArgs e)
{
Panel p = new Panel();
p.BorderStyle = BorderStyle.FixedSingle;
p.Width = 200;
p.Height = 100;
Label label1 = new Label();
label1.BorderStyle = BorderStyle.FixedSingle;
label1.Text = "Hello";
label1.Anchor = AnchorStyles.Top;
Label label2 = new Label();
label2.BorderStyle = BorderStyle.FixedSingle;
label2.Text = "World!";
label2.Anchor = AnchorStyles.Bottom;
p.Controls.Add(label1);
p.Controls.Add(label2);
middleFlow.Controls.Add(p); // add to the center most FlowLayoutPanel on Form1
}
结果似乎是 label1 被放置在 label2 之上,尽管 label2 被添加到第二个。此外,锚值似乎被忽略了(因为当我打算将它们分别锚定到 Panel 组件的顶部和底部时,label1 覆盖了 label2)
如果我使用 Dock 属性而不是 Anchor 属性,则行为符合预期。为什么 Anchor 属性在这种情况下不起作用?
另外,有没有办法将组件锚定到其他组件?我注意到,当我在运行时增加表单的大小时,面板之间会出现水平“间隙”。理想情况下,我希望面板一起增长,防止它们之间的任何水平间隙/空白?
提前感谢您的任何建议或提示。
【问题讨论】:
标签: c# winforms user-interface