C# 如何使用代码设置Windows窗体的起始位置?
是否有方法使用代码设置Windows窗体的起始位置?似乎无论我尝试什么都会导致startPost成为默认设置 以下是我在表单中要显示的内容:C# 如何使用代码设置Windows窗体的起始位置?,c#,.net,winforms,C#,.net,Winforms,是否有方法使用代码设置Windows窗体的起始位置?似乎无论我尝试什么都会导致startPost成为默认设置 以下是我在表单中要显示的内容: public DealsForm() { InitializeComponent(); this.StartPosition = FormStartPosition.CenterParent; } 下面是我显示表单的步骤: private void nvShowDeals_LinkClick
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()。。。但是我真的不想把它显示为一个对话框。我的第一反应是:用VS2008做一点实验。它应该位于“常规属性”屏幕中
如果没有VisualStudio,那么它会变得更难
要检查的好站点可能是:
很抱歉,我无法提供更多帮助您是否尝试在调用方法中设置属性
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);
}
尝试将其置于InitializeComponent()之前。InitializeComponent之后可能已经太晚了(表单可能已经启动,StatPosition设置得太晚)
更新
我刚刚写道:
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
}
以及:
在一个VS项目(全新的)中,当我在Frim2中点击一个按钮时,它会在屏幕中间打开表单。您也可以对Parent…执行同样的操作。我建议您检查DealsForm.Designer.cs并删除其中设置StartPosition的行,然后按原样执行
或者,可以尝试在窗体的加载或显示事件中设置它
如果我执行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);
}
在这里,我将做以下更改:
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方法。注意:我还附上了简单的代码和结果图像。”
MS:“不幸的是,我们将无法在未来的版本中修复此特定问题,因为这里的修复将是对WinForms 1、1.1和2行为的突破性更改”以家长为中心进行.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;
您可以通过在Form\u Load事件中调用this.CenterToParent()来实现这一点(当父对象实际已知时)。不要在构造函数中调用它,因为调用Show(form)时会设置它的父级
private void myForm_Load(object sender, EventArgs e)
{
CenterToParent();
}
我知道这条线索很旧,但可以很容易地回答,所以希望能帮助遇到它的其他人找到简单的解决方案。我尝试了这个。。。不起作用。。。你会认为这么简单的东西很容易实现,这只是一个何时调用属性的问题,非常确定。我本想帮你,尝试一个简单的解决方案,但你投票否决了我,所以忘了我的帮助。祝你有愉快的一天。我没有投票否决你。。。事实上我刚刚投了你的票来对付那些投你反对票的人。@Daok你实际上不会帮助别人,因为有人投了你的反对票:|当你开始帮助别人,你试图做一个小项目来找到解决方案时,你就投了反对票。我试过这个。。。不起作用。。。你会认为这么简单的事情很容易实现。你是对的。。。我认为唯一一次不会被忽视的是它是否是和MDI儿童。这是一个好的,合理的问题。请投赞成票。0不是此的正确值。。。