Когда мне нужно будет вызывать form.ShowDialog (IWin32Window), а не form.ShowDialog ()? - PullRequest
1 голос
/ 22 апреля 2009

У меня есть некоторый код, который вызывает перегрузку form.ShowDialog(IWin32Window) вместо form.ShowDialog(), но который передается в текущем активном окне как параметр.

Использование другой перегрузки, похоже, оставляет поведение без изменений. Безопасно ли переключаться на более простую перегрузку? Когда я хочу передать параметр IWin32Window?

Ответы [ 3 ]

3 голосов
/ 22 апреля 2009

Параметр IWin32Window предназначен для указания владельца диалога. В данном случае это интерфейс, так что вы можете иметь неуправляемые окна (например, из COM-объекта, который вы используете) в качестве владельца диалога.

Я должен не согласиться с пользователями здесь, которые говорят, что вы не должны указывать владельца. На самом деле, всегда желательно указывать владельца формы, когда это возможно. Хотя диалоги могут быть не такими важными, как немодальные формы, привычка указывать владельца - это всегда хорошая идея.

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

Вы должны использовать конструктор void при нормальных обстоятельствах. Как сказал Натан, используйте конструктор IWin32Window только в том случае, если вы хотите показать диалог с конкретным владельцем. Что обычно не требуется.

Документация для ShowDialog () гласит: «Показывает форму в виде модального диалогового окна с текущим активным окном, установленным в качестве его владельца». Таким образом, если вам явно не нужно устанавливать владельца формы для окна, которое НЕ является активным окном, нет необходимости использовать ShowDialog (IWin32Window).

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

Вы можете использовать параметр IWin32Window, если хотите добавить родительскую форму в другое приложение или форму.

Так, например, вы можете получить дескриптор другого приложения или формы и показать свою форму как часть этого приложения. Вы можете найти больше информации здесь

...