2014-10-08 24 views
0

今天我试图用c#将多个窗口控件按顺序放到面板上。 我想让它们停靠在顶部,这样我就可以使用BringToFront()将它们堆叠起来。winforms中的对接和锚定行为的组合

但是我也想让他们居中。目前,停靠行为强制屏幕左侧的控件(无论我调整大小和更改位置属性)

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

我已经研究了这个广泛的几个小时,并没有找到这个问题的答案。是否可以使用这些属性中的任何一个或两个将我的控件堆叠在面板的中心?

我的代码目前维持为这样:

//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 

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

谢谢:) Anya

编辑: 这个标题我的问题相当不错: http://www.techrepublic.com/article/manage-winform-controls-using-the-anchor-and-dock-properties/

这说明使用对接,控制可堆叠旁边对方。我只想将停靠的堆叠控件绑定到面板的左侧边缘。

+0

检查['TableLayoutPanel'](http://msdn.microsoft.com/en-us/library/system.windows。 forms.tablelayoutpanel.aspx),它有布局法术。关于'BringToFront()',而不是后面的东西,然后把它放在前面,你可以让它看起来不可见('Visible = false')并正确布置,这样就可以正确定位它。 – Sinatr 2014-10-08 12:28:12

+0

不清楚你想要做什么。如果你* BringToFront *一个控件,然后添加一个新的它的顶部,那么它将不可见。 – 2014-10-08 12:35:58

+0

我正在使用BringToFront()设置我的控件的z顺序,我希望页面上的每个控件都可见 - 作为控件列表。我一次添加一个控件,并需要将它们添加到现有列表的末尾。 – 2014-10-08 13:00:16

回答

0

没有办法使用对接和锚定的组合。 TableLayoutPanel可能在这里工作,但我被绑定到一个简单的面板。

的修复是利用填充以强制控制到中心:

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