将表单添加到UserControl -这是可能的吗?

本文关键字:添加 表单 UserControl | 更新日期: 2023-09-27 18:07:50

通常情况下,控件被添加到表单中。但是我需要做一个相反的事情-添加一个表单实例到容器用户控件。

这背后的原因是我需要将第三方应用程序嵌入到我自己的应用程序中。由于复杂性,将表单转换为用户控件是不可行的。

将表单添加到UserControl -这是可能的吗?

这可以通过将表单的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所说的,我发现如果你把表单放入的控件是一个Flow Layout Panel,禁用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);
        }