winforms中对接和锚定行为的组合

时间:2014-10-08 12:00:43

标签: c# winforms docking

今天我正在尝试使用c#按顺序将多个窗口控件放到面板上。 我希望它们停靠在顶部,这样我就可以使用BringToFront()来堆叠它们。

但是我也希望他们能够集中精力。目前,对接行为会强制控件位于屏幕左侧(无论我调整多少大小并更改位置属性)

然后我尝试将控件锚定到面板的顶部。这使得控件可以居中并让我调整它们的大小,但锚定没有堆叠行为,每个控件都会覆盖前一个。

我已经对这个问题进行了长时间的研究,并且没有找到这个问题的答案。是否可以使用其中一个或两个属性将我的控件堆叠在面板的中心?

我的代码目前如此:

//Docking 
userControl.Dock = DockStyle.Top;
userControl.Width = 633;
userControl.Left = (pnlRules.Width - userControl.Width) / 2; //doesn't work
Point location = new Point(((pnlRules.Width - userControl.Width) / 2), 0);
userControl.Location = location; //doesn't work
userControl.BringToFront();

OR

//Anchoring
userControl.Anchor = AnchorStyles.Top;
Point location = new Point(((pnlRules.Width - userControl.Width) / 2), 0);
userControl.Location = location;
userControl.BringToFront(); //doesn't work

我的输出是绑定到左侧面板边缘的堆叠控件(对接)或重叠控件精美调整大小和居中(锚定)

谢谢:) 安亚

编辑: 这很好地说明了我的问题: http://www.techrepublic.com/article/manage-winform-controls-using-the-anchor-and-dock-properties/

这解释了使用对接,控件可以彼此相邻堆叠。我希望停靠的堆叠控件不会绑定到面板的左边缘。

1 个答案:

答案 0 :(得分:0)

无法使用对接和锚定的组合。 TableLayoutPanel可能在这里工作但我被绑在一个简单的Panel上。

修复是使用填充强制控件居中:

userControl.Dock = DockStyle.Top;
pnlParent.Padding = new Padding((pnlParent.Width - userControl.Width) / 2, 0, 0, 0);
userControl.BringToFront();