Внедрение winform в winform (С#)

Возможно ли внедрить форму окна в другую форму Windows?

Я создал форму окна в Visual Studio вместе со всем связанным с ней поведением.

Теперь я хочу создать другую форму окна, содержащую представление табуляции, и я хочу вставить первую форму окна в представление табуляции. Возможно ли это?

Ответ 1

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

Ответ 2

отказ

Это будет работать, поскольку я широко использую его в своем приложении. При этом я буду следовать маршруту управления пользователями, так как в зависимости от того, как далеко вы продвинетесь, вещи встраивания начнут отслаиваться. 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.
В этом случае вкладка в форме, с которой я звоню.

Ответ 3

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

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

Ответ 4

скажем, у вас есть 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);

Ответ 5

Вы можете попробовать API-интерфейс SetParent(), хотя я не проверял, что он будет работать сам. Если это не сработает, решение Mendlet выше, вероятно, является вашим лучшим вариантом.