C# - WinForms - SDI или MDI подход?

Я создаю приложение Visual C# WinForms, которое будет содержать 4 формы:

  1. Форма "управления", которая будет иметь где-то между 2 кнопками и, возможно, до 10 или около того. Поэтому на экране должно быть достаточно места для максимального количества кнопок.
  2. Форма "регистрации", которая будет содержать большой элемент управления textbox.
  3. Форма "config", которая будет содержать вкладку с различными настройками конфигурации, которые можно настроить.
  4. Форма "Журнал заказов", которая очень похожа на #2.

Вероятно, пользователь захочет изменить каждую из этих форм по-разному. Тем не менее, я хотел бы, чтобы эти формы управлялись родительской формой, чтобы при закрытии приложения все остальные формы закрывались. Есть ли способ сохранить подход MDI, но позволить дочерним формам перемещаться за пределы родительской формы, используя C# WinForms? Спасибо!

3 ответа

Решение

Я немного поработал с приложениями MDI и попробовал нечто подобное.

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

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

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

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

Обычно для таких случаев вы используете функцию "стыковки". То же самое делается в самой Visual Studio. Таким образом, пользователь может легко скрывать / показывать формы.

Такой пакет не поставляется с Visual Studio, но для этого есть бесплатные библиотеки. Проверьте это http://sdock.codeplex.com/ например.

Вы можете делать все что угодно.

Вы можете установить отношения родитель-ребенок между формами. Или, если хотите, вы можете закрыть другие формы, когда основная форма закрыта.

Большинство систем отходят от MDI (как, например, Office), поэтому я бы, вероятно, использовал интерфейс в стиле SDI, даже если у вас есть несколько форм. MDI имеет тенденцию не очень эффективно использовать экранную недвижимость, и большинство современных пользователей не привыкли иметь дело с некоторыми из его особенностей.

Другие вопросы по тегам