Подход C # — WinForms — SDI или MDI?

#c# #winforms #mdi #sdi

#c# #winforms #mdi #sdi

Вопрос:

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

  1. Форма «управления», которая будет иметь где угодно от 2 кнопок и, возможно, до 10 или около того. Таким образом, на экране должно быть достаточно места для максимального количества кнопок.
  2. Форма «протоколирования», которая будет содержать элемент управления большим форматированным текстовым полем.
  3. Форма «config», которая будет содержать элемент управления tab с различными параметрами конфигурации, которые можно настроить.
  4. Форма «журнал заказов», которая очень похожа на # 2.

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

Ответ №1:

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

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

Ответ №2:

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

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

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

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

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

Ответ №3:

Вы можете делать практически все, что захотите.

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

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