在其他线程的帮助下,我找到了一个可行的解决方案:
using (ConnectingForm CF = new ConnectingForm())
{
CF.StartPosition = FormStartPosition.Manual;
CF.Show(this);
......
}
在新表单的“加载事件”中:
private void ConnectingForm_Load(object sender, EventArgs e)
{
this.Location = this.Owner.Location;
this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2;
this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2;
}
(如果我有错,请纠正我)以下是我对问题和解决方案的理解:
一开始的问题是第一个窗体(MainForm)的启动位置设置为Windows默认位置,这会导致每次启动窗体时位置都不同。当我调用新窗体(Connecting form)时,它的位置不是相对于父窗体的位置,而是在屏幕的左上角(0, 0)位置。所以我看到的是MainForm的位置变化,让Connecting Form的位置看起来像是在移动。因此,解决这个问题的方法基本上是首先将新窗体的位置设置为主窗体的位置。这样做后,我就可以将位置设置为MainForm的中心了。
简而言之,新窗体的位置与父窗体的位置无关,而是固定在一个位置(我猜是0,0)。
我为了方便自己,将MainForm的启动位置改为固定位置。我还添加了一个事件,以确保新窗体的位置始终位于MainForm的中心。
private void Location_Changed(object sender, EventArgs e)
{
this.Location = this.Owner.Location;
this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2;
this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2;
}
private void ConnectingForm_Load(object sender, EventArgs e)
{
this.Owner.LocationChanged += new EventHandler(this.Location_Changed);
this.Location = this.Owner.Location;
this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2;
this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2;
}
希望这对有同样问题的人有所帮助!