В чем разница между ShowDialog () и ShowDialog (IWin32Window) в c #? - PullRequest
5 голосов
/ 16 сентября 2011

И ShowDialog();, и ShowDialog(IWin32Window);, похоже, делают для меня одно и то же. Документация тоже не очень понятна.

Мне сказали, что ShowDialog(IWin32Window); будет гарантировать, что диалоговое окно находится поверх всего, что передается в качестве окна владельца.

В документации MSDN об этом ничего не говорится, так что это похоже на черную магию.

Ответы [ 5 ]

9 голосов
/ 16 сентября 2011

http://msdn.microsoft.com/en-us/library/w61zzfwe.aspx довольно ясно показывает, что параметр представляет окно владельца.И это поведение окна владельца - оно остается позади своих дочерних элементов и не закрывается, оставляя его дочерние элементы все еще отображенными.

5 голосов
/ 16 сентября 2011

Когда вызывается ShowDialog (), текущее активное окно становится владельцем диалогового окна.Если вы хотите указать конкретного владельца, используйте другую версию этого метода (ShowDialog (IWin32Window)).

Это указано в документации MSDN.

http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx

2 голосов
/ 16 сентября 2011

Внутренне ShowDialog() вызывает ShowDialog(IWin32Window) с нулевым аргументом. Если аргумент не нулевой, он устанавливается как владелец формы. Если владелец равен нулю, он будет использовать GetActiveWindow(), чтобы получить IntPtr для активного окна и использовать его в качестве владельца. Вы можете проверить это самостоятельно, используя ILSpy .

1 голос
/ 30 июня 2013

.NET позволяет форме «владеть» другими формами. Собственные формы полезны для плавающий инструментарий и командные окна. Одним из примеров владения формой является окно «Найти и заменить» в Microsoft Word. Когда окно владельца свернутые формы также автоматически свернуты. Когда принадлежащая форма перекрывает своего владельца, она всегда отображается сверху.

(c) "Pro .NET 2.0 Windows Forms и пользовательские элементы управления" Мэтью Макдональда.


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

Одной из особенностей этих отношений является то, что форма собственности влияет на поведение формы его владельца (при использовании ShowDialog ):

  • Форма владельца не может быть свернута, развернута или даже перемещена.
  • Собственная форма блокирует ввод мыши и клавиатуры в форму владельца.
  • Форма владельца свернута, если она принадлежит.
  • Только закрытая форма может быть закрыта.
  • Если формы владельца и владельца свернуты, и если пользователь нажимает Alt + Tab, чтобы переключиться на собственную форму, активная форма активируется.

В отличие от метода ShowDialog, однако, вызов метода Show делает не устанавливать скрытые отношения собственника . Это означает, что любая форма может быть текущей активной формой.

Без неявных отношений с владельцем, владельцем и формами собственности одинаково может быть свернуто, развернуто или перемещено. Если пользователь закрывает любой форма, отличная от основной формы, последняя активная форма возобновлена.

Хотя ShowDialog устанавливает неявные отношения с владельцем , нет встроенного способа, которым принадлежащая форма могла бы перезвонить или запросить форма, которая открыла его. В немодальном случае вы можете установить новый Форма собственности владельца для установления отношений с владельцем. Как ярлык, вы можете передать форму владельца в качестве аргумента для перегрузки метода Show, который также принимает параметр IWin32Window (IWin32Window реализуется объектами пользовательского интерфейса Windows Forms, которые Свойство Win32 HWND через свойство IWin32Window.Handle).

Поведение форм в явной модальной собственности владельца отношение такое же, как его неявный модальный аналог, но немодальные отношения собственника обеспечивают дополнительное поведение в не принадлежащий владельцу немодальный кейс. Во-первых, немодальная форма собственности всегда появляется в верхней части формы владельца, хотя любой из них может быть активным. Это полезно, когда вам нужно сохранить форму, например плавающий инструмент окно, поверх других форм в приложении. Во-вторых, если пользователь нажимает Alt + Tab, чтобы перейти от владельца, принадлежащие формы следуют подходить. Чтобы убедиться, что пользователь знает, какая форма является основной, сворачивание владельца скрывает кнопки панели задач для всех принадлежащих форм, оставляя видимой только кнопку панели задач владельца.

(c) «Программирование Windows Forms 2.0» Криса Селлса, Майкла Вайнхардта.

0 голосов
/ 28 августа 2014

frm2.ShowDialog () делает frm2 в качестве диалогового окна модели, мы не можем щелкнуть где-либо на форме form1, если не закроем экземпляр frm2.

frm2.show () такого ограничения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...