Как правило, избегайте TopMost, если вы абсолютно не должны. Если вы абсолютно не должны, никогда не используйте более одной формы TopMost одновременно. (В конце концов, не может быть трех форм TopMost - кто-то должен проиграть).
Сначала убедитесь, что вы правильно устанавливаете владельца, когда звоните Form.ShowDialog()
. Это повысит вероятность появления новой формы в соответствующем месте и улучшит поведение приложения. Во-вторых, убедитесь, что у вас есть только одно окно TopMost в любое время. Совокупная неспособность сделать эти вещи, безусловно, может вызвать вашу проблему. E.g.:
// MainForm.cs -- Don't do this
this.TopMost = true;
childForm.TopMost = true;
childForm.ShowDialog(/*no parent spec'd*/);
Что теперь происходит? И основная форма, и дочерняя форма являются главными, поэтому один из них должен проиграть. MainForm был активен, когда он создал childForm как самый верхний, но у childForm нет родителя. Возможно, Windows решила сделать рабочий стол своим родителем. Это может привести к тому, что основная форма останется в только что открытой дочерней форме.