winforms中停靠和锚定行为的组合

本文关键字:组合 停靠 winforms | 更新日期: 2023-09-27 18:25:52

今天我尝试使用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();

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

这解释了使用停靠,控件可以堆叠在一起。我只是希望停靠的、堆叠的控件不绑定到面板的左边缘。

winforms中停靠和锚定行为的组合

没有办法结合使用停靠和锚定。TableLayoutPanel可能在这里工作,但我被束缚在一个简单的Panel上。

修复方法是使用填充物迫使控制中心:

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