2010-10-16 4 views
0

Предположим, у меня есть следующая задача.Управление несколькими формами одновременно

Существует основная форма заявки с многочисленными кнопками; когда вы нажимаете на каждую из этих кнопок, вы получаете еще одну форму. Второй щелчок на кнопке должен закрыть открытую форму.

Эти формы не должны отображаться на панели задач, поскольку они являются вспомогательными. Они не должны быть диалоговыми, поскольку это блокирует основную форму приложения и предотвращает выполнение пользователем каких-либо других операций с главным окном или с другими формами, такими как открытые. Они должны отображаться над основной формой, но не над другими окнами (поэтому TopMost не подходит). Когда такие формы закрыты, основная форма должна быть уведомлена, а когда основная форма сведена к минимуму, их также следует минимизировать.

Как бы вы решили эту проблему?

Текущее решение основано на использовании крючков. Это не очень легко понять и очень сложно поддерживать (в основном потому, что я не испытываю в win32). Он работает нормально около 90% ситуаций, но в 10% это не так.

Возможно, требования к поведению форм строгие?

ответ

0

Это не проблема. Используйте отображение Show (owner) для отображения формы.

Собственная форма всегда находится на вершине ее владельца. Он минимизирует автоматически при сведении к минимуму главного окна. Нет необходимости в ShowInTaskbar. Другая модель окна, поддерживаемая winforms, - это MDI, проверьте свойство MdiParent. Окна для детей ограничены в пределах главного окна. Также рассмотрите использование UserControls вместо формы, вы можете поменять их и вынуть по мере необходимости. Или интерфейс с вкладками, используя TabControl. Набор DockPanel от Weifenluo является очень популярной версией модели оформления окна Visual Studio, поддерживающей окна, которые можно состыковать и плавать в главном окне. Здесь много вариантов :)

+0

I событие не знало о владельце ... Похоже, это хорошее решение. – 26071986

0

Вот как большинство ваших требований может быть достигнуто:

  • Установите Owner каждого ребенка формы, чтобы быть основной формой.

MSDN Цитата:

Когда форма принадлежит другой форме, он закрыт или скрыт с владельцем форме. Например, рассмотрим форму с именем Form2, которая принадлежит форме с именем Form1. Если Form1 закрыт или сведен к минимуму, Form2 также закрыт или скрыт. Собственные формы также никогда не отображаются за их формой владельца. Вы можете использовать принадлежащие формы для окон такие как найти и заменить окна, которые не должны исчезать при выборе владельца . Чтобы определить формы , которые принадлежат родительской форме, использует свойство OwnedForms.

  • Для останавливая формы появляться в панели задач вы нужно установить ShowInTaskBar свойству
1

Я рекомендую использовать некоторые менеджер окон, так что каждая кнопка сообщит менеджер окон для переключения видимость формы X, если X нет, это будет показано, если оно есть, оно будет замкнуто. Вы должны иметь возможность настроить окна так, чтобы они не отображались на панели задач. Для видимости я не уверен, что вы имеете в виду. Когда вы открываете форму с помощью кнопки, она, как правило, переходит на передний план, что должно быть хорошо. Если вы переключите окно, то чего вы ожидаете? Должно ли главное окно всегда оставаться в фоновом режиме или разрешено ли на фронт быть сфокусированным? Всякий раз, когда я видел, как приложения меняют такое стандартное поведение, они каким-то образом не сработали. Появились либо неправильные окна, либо некоторые из них были недоступны, или пользователь был просто сбит с толку, потому что эти окна не действовали как все остальные окна.

Смежные вопросы