如何使用代码设置Windows窗体表单的StartPosition?
有没有办法使用代码设置Windows窗体表单的StartPosition? 似乎无论我尝试什么导致StartPostion是默认值。
这是我在要显示的表单中所做的事情:
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
对不起,我不能更有帮助