是否可以在其他窗口窗体中嵌入窗体?
我在Visual Studio中创建了一个Windows窗体及其所有相关行为。
我现在想要创建另一个包含选项卡视图的窗体,我想将第一个窗体窗体嵌入到选项卡视图中。这可能吗?
答案 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)