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

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

1
Ant 22 Апр 2009 в 16:33

3 ответа

Лучший ответ

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

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

3
Adam Robinson 22 Апр 2009 в 16:48

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

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

0
Nathan W 22 Апр 2009 в 16:44

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

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

0
NascarEd 22 Апр 2009 в 17:02
Всегда полезно написать свой код, чтобы передать свое намерение, поэтому, даже если вы хотите связать его только с активным окном, указание этого окна в качестве параметра делает ваш код явным в его намерениях, а не полагается на тех, кто поддерживает ваш код. чтобы определить, какое окно должно было быть активным при отображении диалогового окна.
 – 
Jeff Yates
22 Апр 2009 в 17:33
Как вы думаете, следует ли использовать перегрузку без параметров только тогда, когда вы хотите, чтобы любое окно, которое является активным окном, было родительским?
 – 
Ant
22 Апр 2009 в 20:46