C# 将表单转换为用户控件

C# 将表单转换为用户控件,c#,winforms,user-controls,C#,Winforms,User Controls,我有一个我正在使用的第三方代码库;此库的一部分是winforms应用程序,用于编辑此库使用的配置文件。我想将他们的配置编辑器应用程序嵌入到我的应用程序中 我有他们库的源代码,而配置编辑器(据我所知)是一个使用标准控件的直接Winforms应用程序。我正在尝试将应用程序的主窗体转换为UserControl,这样我就可以在我的应用程序WPF中托管它(WPF的WindowsFormsHost不会托管窗体对象,我得到一个异常) 我将form对象更改为从UserControl而不是form继承,并修复了所

我有一个我正在使用的第三方代码库;此库的一部分是winforms应用程序,用于编辑此库使用的配置文件。我想将他们的配置编辑器应用程序嵌入到我的应用程序中

我有他们库的源代码,而配置编辑器(据我所知)是一个使用标准控件的直接Winforms应用程序。我正在尝试将应用程序的主窗体转换为UserControl,这样我就可以在我的应用程序WPF中托管它(WPF的WindowsFormsHost不会托管窗体对象,我得到一个异常)

我将form对象更改为从UserControl而不是form继承,并修复了所有编译器错误(UserControl上不存在的属性初始化不多),但发生的是我新转换的控件只是空白

当我运行我的测试应用程序时,我没有看到任何组成原始表单的控件,只有一个空白页面

有什么想法吗?我真的不想从头开始重新实现他们的应用程序,那太糟糕了


编辑:我忘了提到我在WinForms应用程序(而不是WPF)中测试它,只是为了在尝试从WPF使用控件之前让它工作。

显然InitializeComponent()方法不再正常运行。当然不知道为什么

也许更好的方法是在控件中转换窗体:

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      var f2 = new Form2();
      f2.TopLevel = false;
      f2.Location = new Point(5, 5);
      f2.FormBorderStyle = FormBorderStyle.None;
      f2.Visible = true;
      this.Controls.Add(f2);
    }
  }

我不知道为什么,但他们的InitializeComponent()方法基本上是将所有控件的可见属性设置为False。我猜它一定是使用了某种表单启动事件将它们更改为可见,而不是作为UserControl调用,将它们的可见性设置为true。修复了它。

我遇到了类似的问题,只有InitializeComponent中的Adding控件丢失。 像这样

  this.Controls.Add(this.button1);
  this.Controls.Add(this.button2);

只要在设计器代码中修复对表单类的任何引用(在需要回滚时注释掉),只需将类声明从:Form更改为:UserControl。必须删除任何特定于表单的事件处理程序。我已经用一些表单完成了这项工作,效果很好。

当您最初在设计器中打开表单时(在将其转换为用户控件之前),是否看到了所有控件?