Ответ 1
Не напрямую. Вы можете создать usercontrol, переместить весь код из своей формы в usercontrol и использовать его в обеих формах. Возможно, вам придется изменить часть кода из вашей формы, но, вероятно, не так много.
Возможно ли внедрить форму окна в другую форму Windows?
Я создал форму окна в Visual Studio вместе со всем связанным с ней поведением.
Теперь я хочу создать другую форму окна, содержащую представление табуляции, и я хочу вставить первую форму окна в представление табуляции. Возможно ли это?
Не напрямую. Вы можете создать usercontrol, переместить весь код из своей формы в usercontrol и использовать его в обеих формах. Возможно, вам придется изменить часть кода из вашей формы, но, вероятно, не так много.
Это будет работать, поскольку я широко использую его в своем приложении. При этом я буду следовать маршруту управления пользователями, так как в зависимости от того, как далеко вы продвинетесь, вещи встраивания начнут отслаиваться. FYI
Да, это возможно. Вот как:
public static void ShowFormInContainerControl(Control ctl, Form frm)
{
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Visible = true;
ctl.Controls.Add(frm);
}
У меня есть это в библиотеке классов, и затем я называю это так из формы, которую я хочу встроить.
public FrmCaseNotes FrmCaseNotes;
FrmCaseNotes = new FrmCaseNotes();
WinFormCustomHandling.ShowFormInContainerControl(tpgCaseNotes, FrmCaseNotes);
Где tpgCaseNotes
- это элемент управления, в который я хочу FrmCaseNotes
Form FrmCaseNotes
.
В этом случае вкладка в форме, с которой я звоню.
Способ сделать это с помощью пользовательского элемента управления, а не формы. Для этого используются пользовательские элементы управления. Этот метод можно использовать для довольно многих трюков пользовательского интерфейса, таких как мастера (элементы управления могут использоваться совместно с мастером и другими частями приложения), браузеры браузера браузера с деревом и элементы управления заменены на основе выбранного node.
Я довольно много работал с архитектурой приложений, которые используют пользовательские элементы управления для всего и для фреймворков для исследователей, мастеров и других типов форм (даже возвращаясь к VB6). В качестве подхода он работает очень хорошо.
скажем, у вас есть 2 проекта win1 и win2. оба являются проектами winform. вы ищете для внедрения win2 в win1.
решение:
откройте проект win2 и измените тип вывода на "Class Library" (на вкладке Application)
откройте проект win1 и добавьте проект win2 dll как ref в проекте win1 зайдите в код win1 и поставьте это:
win2.Form1 formI = new win2.Form1();
formI.TopLevel = false;
formI.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
formI.Size = this.Size;
formI.BringToFront();
formI.Visible = true;
this.Controls.Add(formI);
Вы можете попробовать API-интерфейс SetParent(), хотя я не проверял, что он будет работать сам. Если это не сработает, решение Mendlet выше, вероятно, является вашим лучшим вариантом.