如果从主窗口(父窗体)的新线程中打开了任何窗口窗体(子窗体),则不可能将子窗口保持在主窗口的中心,因此我们需要通过以下方式手动确定子窗口的位置: X和Y坐标的平均值。
在子窗口的属性中,将“ StartPosition”更改为“ Manual”
主窗口中的代码
private void SomeFunction()
{
Thread m_Thread = new Thread(LoadingUIForm);
m_Thread.Start();
OtherParallelFunction();
m_Thread.Abort();
}
private void LoadingUIForm()
{
m_LoadingWindow = new LoadingForm(this);
m_LoadingWindow.ShowDialog();
}
子窗口中的代码,用于通过父代当前位置以及大小来定义其自身位置
public LoadingForm(Control m_Parent)
{
InitializeComponent();
this.Location = new Point( m_Parent.Location.X+(m_Parent.Size.Width/2)-(this.Size.Width/2),
m_Parent.Location.Y+(m_Parent.Size.Height/2)-(this.Size.Height/2)
);
}
通过计算此函数的自身中心(this.height / 2)和(this.width / 2),可以计算父中心的坐标,并将子窗口精确地保持在父中心。进一步考虑了父级迁移事件。