Как встроить форму MDI в другое приложение? - PullRequest
1 голос
/ 01 апреля 2011

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

Легко создать пользовательский элемент управления, содержащий обычную Windows.Form. Но как это сделать, если форма для встраивания имеет свойство IsMdiContainer == true?

Thx

Ответы [ 2 ]

0 голосов
/ 02 мая 2011

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

1) В вашем пользовательском элементе управления объявите приложение Windows, которое является хостом MDI. 2) Сопоставьте функциональность создания и обработки новых окон с панелью инструментов вашего пользовательского элемента управления или вы можете сопоставить ее с пользовательским элементом управления. 3) Каждый раз, когда вы создаете новое окно, присваивайте родительскому MDI окно, которое вы объявляете в шаге 1.

Основная идея в этом посте Панель C # As MDI Container

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

0 голосов
/ 01 апреля 2011

Я не думаю, что это будет возможно , потому что :

Многодокументный интерфейс (MDI) родительская форма должна быть верхнего уровня окно.

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

На самом деле существует хакерский подход, при котором вы можете переопределять окна во время выполнения от других процессов с помощью функции SetParent . Так, например, вы можете «украсть» приложение окна калькулятора и разместить его в другом MDI, но это имеет тенденцию быть крайне нестабильным, особенно для более сложных приложений. Вам нужно будет запустить приложение MDI как отдельный процесс, а затем вызвать SetParent из размещенного приложения. Возможно, стоит попробовать, если ни один из вышеупомянутых вариантов не соответствует вашим потребностям, но наиболее вероятным результатом будет исключение времени выполнения.

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