在其他线程的帮助下,我找到了一个可行的解决方案:
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 默认位置,该位置会有所不同当您启动表单时。然后当我调用新表单(连接表单)时,它的位置不是相对于它的父位置,而是位置 (0, 0)(屏幕的左上角)。所以我看到的是 MainForms 的位置发生了变化,这使得 Connecting Form 的位置看起来像是在移动。所以解决这个问题的方法基本上是先将新窗体的位置设置为主窗体的位置。之后,我能够将位置设置为 MainForm 的中心。
TL;DR 新表单的位置不是相对于父表单的位置,而是相对于我猜是 (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;
}
希望这会帮助其他有同样问题的人!