Wenn ein Fensterformular (untergeordnetes Formular) aus einem neuen Thread des Hauptfensters (übergeordnetes Formular) geöffnet wurde, ist es nicht möglich, das Unterfenster in der Mitte des Hauptfensters zu halten. Daher müssen wir die Position des Unterfensters manuell durch festlegen Mittelwerte der X- und Y-Koordinaten.
Ändern Sie in den Eigenschaften von Subwindow die "StartPosition" in "Manual".
Code im Hauptfenster
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();
}
Code im Unterfenster zum Definieren der eigenen Position anhand der übergeordneten aktuellen Position sowie der Größe
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)
);
}
Hier werden die Koordinaten des Zentrums des Elternteils berechnet, und das Unterfenster wird genau in der Mitte des Elternteils gehalten, indem sein eigenes Zentrum mit (this.height / 2) und (this.width / 2) berechnet wird, die diese Funktion sein kann weiter genommen für Eltern umgesiedelte Ereignisse auch.