Встраивание winform в winform (c #) - PullRequest
12 голосов
/ 19 ноября 2008

Можно ли вставить форму окна в другую форму окна?

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

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

Ответы [ 5 ]

17 голосов
/ 21 мая 2009

Отказ

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

13 голосов
/ 19 ноября 2008

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

5 голосов
/ 19 ноября 2008

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

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

3 голосов
/ 28 июля 2011

допустим, у вас есть 2 проекта win1 и win2. оба проекта winform. вы ищете встраивание win2 в win1.

Решение:

открыть проект win2 и изменить тип вывода на «Библиотека классов» (на вкладке «Приложение»)

откройте проект win1 и добавьте проект win2 dll в качестве ссылки в проект 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);
0 голосов
/ 19 ноября 2008

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

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