#.net #winforms #dialog #window
#.net #winforms #диалоговое #окно
Вопрос:
У меня есть таймер в основной форме приложения.
Таймер отображает экран nag каждые N секунд.
Но я бы хотел избежать отображения экрана nag, если открыты какие-либо модальные диалоговые окна. В противном случае произойдет перекрытие.
Я могу использовать Application.OpenForms
, но это не учитывает такие диалоги, как OpenFileDialog
.
Как определить, отображаются ли какие-либо дочерние диалоговые окна в данный момент?
Комментарии:
1. Не существует простого способа сделать это на 100% надежно. Лучшим подходом является простое увеличение общедоступной статической переменной перед вызовом ShowDialog() и последующее ее уменьшение.
2. @HansPassant: Вы упоминаете отсутствие простого способа надежного достижения этого. Не могли бы вы намекнуть на то, как можно было бы приблизиться к этому, не отслеживая статические переменные по всей сложной форме?
Ответ №1:
Рассмотрите возможность использования этих Win32 API:
GetForegroundWindow();
GetAncestor(foregroundWindow, GA_ROOTOWNER);
Получить windowthreadprocessid (foregroundWindow, вывести activeProcessId)