通常,控件被添加到表单中。但我需要做相反的事情 - 将 Form 实例添加到容器用户控件。
这背后的原因是我需要将第三方应用程序嵌入到我自己的应用程序中。由于复杂性,将表单转换为用户控件是不可行的。
这可以通过将表单的 TopLevel 属性设置为 false 来实现。这将它变成一个子窗口,几乎与 UserControl 没有区别。这是带有所需代码的示例用户控件:
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
public void EmbedForm(Form frm) {
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Visible = true;
frm.Dock = DockStyle.Fill; // optional
this.Controls.Add(frm);
}
}
根据 Hans Passant 所说,我发现如果您将表单放入的控件是流布局面板,则禁用 WrapContents 将修复内容未与 FlowDirection 内联放置的对齐问题。
public void EmbedForm(Form frm)
{
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Visible = true;
FLP_Inspector.WrapContents = false;
FLP_Inspector.Controls.Add(frm);
}