在winform中嵌入winform(c#)

是否可以在另一个窗体中嵌入窗体?

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

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

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

放弃

这将有效,因为我在我的应用程序中广泛使用它。 话虽这么说,我会追求用户控制路线,因为取决于你携带的东西开始剥落的程度 。 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是控件我希望嵌入FORM FrmCaseNotes。在这种情况下,我调用的表单上有一个标签页。

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

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

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

解:

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

打开项目win1,并在win1代码中添加win2 dll项目作为参考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); 

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