如何使用代码设置Windows窗体表单的StartPosition?

有没有办法使用代码设置Windows窗体表单的StartPosition? 似乎无论我尝试什么导致Star​​tPostion是默认值。

这是我在要显示的表单中所做的事情:

public DealsForm() { InitializeComponent(); this.StartPosition = FormStartPosition.CenterParent; } 

这是我正在做的显示表单:

  private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { DealsForm frm = new DealsForm(); frm.DataSource = this.Deals; frm.Show(this); } 

我已尝试在上述每种方法中加入以下内容,但无济于事:

 this.StartPosition = FormStartPosition.CenterParent; 

如果我通过属性编辑器设置它…它完美地工作,但我真的想通过代码来做。

应该是一个明智的选择…但对于我的生活,我似乎无法弄清楚……也许我需要更多的咖啡因。

更新:

如果我做一个ShowDialog()并传递它的工作原理…但我真的不想把它显示为对话框。

如果我做一个ShowDialog()并传递它的工作原理…但我真的不想把它显示为对话框。

这是正确的,因为ShowDialog会设置frm.Parent == nvShowDeals.Parent
由于您使用的是.Show(),因此frm.Parent == null因此会忽略FormStartPosition.CenterParent。

所以为了完成这个function,我会做出以下改变:

 public DealsForm() { InitializeComponent(); //this.StartPosition = FormStartPosition.CenterParent; } //DealsForm_Load Event private void DealsForm_Load(object sender, EventArgs e) { this.Location = this.Owner.Location; //NEW CODE } 

在这里,我将做出以下更改:

 private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { DealsForm frm = new DealsForm(); frm.DataSource = this.Deals; frm.StartPosition = FormStartPosition.Manual; //NEW CODE frm.Show(this); } 

也许你并不孤单。 也许你不是疯了。 阅读本文(Microsoft Connect客户反馈):

Windows窗体StartPosition属性仅适用于.ShowDialog方法,而不适用于.Show方法

客户:“Windows Form StartPosition仅适用于.ShowDialog方法,而不适用于.Show方法。注意:我还附加了简单的代码和结果图像。”

MS:“不幸的是,我们将来无法在未来的版本中解决这个问题,因为这里的修复将是对WinForms 1,1.1和2行为的重大改变”

您可以通过在Form_Load事件中调用this.CenterToParent()(当父实际已知)时执行此操作。 不要在构造函数中调用它,因为它在调用Show(form)时设置了它。

 private void myForm_Load(object sender, EventArgs e) { CenterToParent(); } 

我知道这个post已经过时但很容易回答,所以希望能帮助遇到它的人找到简单的解决方案。

要以.Show调用的父对象为中心,这就是我必须要做的事情:

 childForm.Location = new Point( (parentForm.Location.X + parentForm.Width / 2) - (childForm.Width / 2), (parentForm.Location.Y + parentForm.Height / 2) - (childForm.Height / 2)); childForm.StartPosition = FormStartPosition.Manual; 

您是否尝试在调用方法中设置属性?

 private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { DealsForm frm = new DealsForm(); frm.DataSource = this.Deals; // Insert this frm.StartPosition = FormStartPosition.CenterParent; frm.Show(this); } 

我建议检查您的DealsForm.Designer.cs并删除在那里设置StartPosition的行,然后按原样执行。

或者,也许尝试在表单的“加载”或“已显示”事件中设置它。

 public DealsForm() { this.StartPosition = FormStartPosition.CenterParent; InitializeComponent(); } 

尝试将它放在InitializeComponent()之前。 在InitializeComponent之后可能已经太晚了(表单可能已经启动并且StatPosition设置得太晚了)。

更新

我刚才写道:

  public Form1() { this.StartPosition = FormStartPosition.CenterScreen; InitializeComponent(); } 

和:

  private void button1_Click(object sender, EventArgs e) { Form1 f = new Form1(); f.Show(); } 

在VS项目(全新)中,当我点击我的form2按钮时,它会打开屏幕中间的表单。 您也可以使用Parent …

我的第一反应是:用VS2008进行一些实验。 它应该在一般属性屏幕中。

如果您没有Visual Studio,那么它会变得更难。

一个很好的网站可能是这个: csharp-online.net

对不起,我不能更有帮助