有没有办法使用代码设置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()
并传递了它的父作品......但我真的不想把它显示为对话框。
答案 0 :(得分:18)
也许你并不孤单。也许你不是疯了。阅读本文(Microsoft Connect客户反馈):
Windows Form StartPosition property only works for .ShowDialog method and not for .Show method
客户:“Windows Form StartPosition仅适用于.ShowDialog方法,而不适用于.Show方法。注意:我还附加了简单的代码和结果图像。”
MS:“不幸的是,我们无法在将来的版本中修复此特定问题,因为此处的修复将是对WinForms 1,1.1和2的行为的重大改变”
答案 1 :(得分:11)
如果我做一个ShowDialog()并通过 它运作的父母......但我真的没有 想把它显示为对话框。
这是正确的,因为ShowDialog会设置frm.Parent == nvShowDeals.Parent
因为你使用.Show()然后frm.Parent == null因此忽略了FormStartPosition.CenterParent。
为了完成这个功能,我会做出以下改变:
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);
}
答案 2 :(得分:6)
您可以通过在Form_Load事件中调用this.CenterToParent()(实际知道父级)来执行此操作。不要在构造函数中调用它,因为它在调用Show(form)时设置了它。
private void myForm_Load(object sender, EventArgs e)
{
CenterToParent();
}
我知道这个帖子已经老了,但很容易回答,所以希望能帮助遇到它的人找到简单的解决方案。
答案 3 :(得分:4)
以.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;
答案 4 :(得分:1)
您是否尝试在调用方法中设置属性?
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);
}
答案 5 :(得分:1)
public DealsForm()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
}
尝试将它放在InitializeComponent()之前。在InitializeComponent之后可能已经太晚了(表单可能已经启动并且StatPosition设置得太晚了。)
我刚刚写道:
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
}
和
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Show();
}
在VS项目(全新)中,当我点击我的form2按钮时,它会打开屏幕中间的表单。您也可以使用Parent ...
答案 6 :(得分:0)
我建议检查您的DealsForm.Designer.cs并删除在那里设置StartPosition的行,然后按原样执行。
或者,也许尝试在表单的“加载”或“显示”事件中设置它。
答案 7 :(得分:-3)
我的第一反应是:用VS2008进行一些实验。它应该在常规属性屏幕中。
如果你没有Visual Studio,那就更难了。
要检查的好网站可能就是这个:csharp-online.net
很抱歉,我无法提供更多帮助