在winform中嵌入winform(c#)

时间:2008-11-19 11:58:44

标签: c# winforms

是否可以在其他窗口窗体中嵌入窗体?

我在Visual Studio中创建了一个Windows窗体及其所有相关行为。

我现在想要创建另一个包含选项卡视图的窗体,我想将第一个窗体窗体嵌入到选项卡视图中。这可能吗?

6 个答案:

答案 0 :(得分:17)

声明

这将有效,因为我在我的应用程序中广泛使用它。话虽这么说,我会追求用户控制路线,因为取决于你携带嵌入的东西开始剥落。 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);
}

我在类库中有这个,然后我从我想要嵌入的FORM中调用它。

public FrmCaseNotes FrmCaseNotes;
FrmCaseNotes = new FrmCaseNotes();
WinFormCustomHandling.ShowFormInContainerControl(tpgCaseNotes, FrmCaseNotes);

tpgCaseNotes是控件,我希望将表格FrmCaseNotes嵌入其中。
在这种情况下,我正在调用的表单上的标签页。

答案 1 :(得分:13)

不直接。您可以创建一个usercontrol,将表单中的所有代码移动到usercontrol,并在两种形式中使用它。您可能需要更改表单中的某些代码,但可能不多。

答案 2 :(得分:5)

执行此操作的方法是使用用户控件而不是表单。这就是用户控件的用途。这种技术可以用于很多用户界面技巧,例如向导(控件可以在向导和应用程序的其他部分之间共享),具有树控件的浏览器样式浏览器和基于所选节点交换的控件。

我已经完成了很多与应用程序体系结构相关的工作,这些体系结构使用用户控件来管理资源管理器,向导和其他类型的表单(甚至回到VB6)的所有内容和框架。作为一种方法,它运作良好。

答案 3 :(得分:3)

假设您有2个项目win1和win2。两者都是winform项目。 你想在win1中嵌入win2。

溶液:

打开win2项目并将输出类型更改为“类库”(在“应用程序”选项卡中)

打开项目win1,并将win2 dll项目添加为win1项目中的ref 进入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);

答案 4 :(得分:0)

您可以尝试SetParent()API调用,但我还没有确认它会自行运行。如果这不起作用,Mendlet上面的解决方案可能是您的最佳选择。

答案 5 :(得分:0)

using System.Runtime.InteropServices;
class EmbedForm{
    [DllImport("user32.dll")]
    public extern IntPtr SetParent(IntPtr hWndChild, hWndNewParent);
    //code, code, code...
}

用法:EmbedForm.SetParent(ChildForm.Handle, ParentForm.Handle)

相关问题