2014-12-02 48 views
0

我是初学者。我想问问我如何能将面板集中在所有决议中。我有面板,其中包括其他面板和其称为ParentPanel。我已经tryed添加到设计这个东西如何为所有分辨率的面板居中

ParentPanel.Location = new Point(
this.ClientSize.Width/2 - ParentPanel.Size.Width/2, 
this.ClientSize.Height/2 - ParentPanel.Size.Height/2); 
ParentPanel.Anchor = AnchorStyles.None; 

,但它说:namescape的“点”式找不到,所以我用帮助它改变New pointNew System.Drawing.Point但它仍然没有工作:/

我的表单是全屏的,它的大小不是这样,WindowsState是Maximazed,StartPosition是CenterScreen。

你能帮助我吗?

+0

欢迎来到StackOverflow!请参阅[“应该在其标题中包含”标签“?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中的共识是“不,他们不应该”。 – 2014-12-02 15:26:46

+0

看到这个答案: http://stackoverflow.com/questions/491399/c-centering-controls-within-a-form-in-net-winforms – 2014-12-02 15:33:42

回答

0

您不应将此代码放置在设计器中,因为设计器的代码是从构造函数调用的,并且此时窗体不可见。

相反,处理SizeChanged事件您Form的(或重写OnSizeChanged方法),并设置ParentPanel位置在那里。

+0

我忘了说,我有窗体开始全屏和它的不是sizebale。 WindowsState是Maximazed,StartPosition是CenterScreen。 – Kuri 2014-12-02 15:36:18

+0

@Kuri,无论如何 - 构造函数不是计算最大化窗体的宽度的正确位置,因为窗体在那一刻不可见,窗体宽度实际上是您在设计器中设置的值,而不是最大化窗体变为可见时的值。处理'VisibleChanged'或重写'protected override void OnSizeChanged(EventArgs e)'(因为它将在窗体上调用也变得可见),并将代码放置在那里。 – 2014-12-02 15:43:48

+0

谢谢!有用! :) – Kuri 2014-12-02 15:54:38

0

你的数学不太对。试试这个:

ParentPanel.Location = new Point(
    (this.ClientSize.Width - ParentPanel.Size.Width)/2, 
    (this.ClientSize.Height - ParentPanel.Size.Height)/2); 
ParentPanel.Anchor = AnchorStyles.None; 
+0

谢谢,但我仍然会得到错误“命名空间点无法找到” – Kuri 2014-12-02 15:41:54

+0

我以为我们已经确定你不应该把这段代码放在设计器文件中?理想情况下,处理表单的加载事件并将代码放在那里(您不会得到名称空间错误)。或者,在推送之后,在调用InitializeComponent()之后将其放入窗体的构造函数中。 – 2014-12-02 15:51:22

+0

但我的数学不错,当我尝试你的和我的代码时,没有什么不同:) – Kuri 2014-12-02 15:59:54