Проблема с Z-Order с участием TopMost и Invoke - PullRequest
0 голосов
/ 06 апреля 2009

Я показываю диалоги с Form.ShowDialog (). Формы установлены в TopMost. Некоторые расчеты обработки изображений выполняются асинхронно в фоновом режиме. Их результаты представлены в основной форме Invoke. Все идет нормально. Странно то, что время от времени модальный диалог перемещается за основной формой. Я предполагаю, что это происходит, когда сообщения, которые создают диалог, каким-то образом «мешают» Invoke.

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 08 апреля 2009

Как правило, избегайте 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 решила сделать рабочий стол своим родителем. Это может привести к тому, что основная форма останется в только что открытой дочерней форме.

0 голосов
/ 08 апреля 2009

Возможно, вы могли бы попробовать передать форму-владелец в качестве параметра ShowDialog, например, (синтаксис VB):

Form.ShowDialog(Me)

Не уверен, что это что-то изменит, но стоит попробовать ...

Кроме того, когда вы говорите «Формы установлены в TopMost», вы имеете в виду основную форму или модальные формы? Вам действительно нужно установить его на TopMost? Иногда формы TopMost ведут себя странно ...

...