C# 将表单转换为用户控件
我有一个我正在使用的第三方代码库;此库的一部分是winforms应用程序,用于编辑此库使用的配置文件。我想将他们的配置编辑器应用程序嵌入到我的应用程序中 我有他们库的源代码,而配置编辑器(据我所知)是一个使用标准控件的直接Winforms应用程序。我正在尝试将应用程序的主窗体转换为UserControl,这样我就可以在我的应用程序WPF中托管它(WPF的WindowsFormsHost不会托管窗体对象,我得到一个异常) 我将form对象更改为从UserControl而不是form继承,并修复了所有编译器错误(UserControl上不存在的属性初始化不多),但发生的是我新转换的控件只是空白 当我运行我的测试应用程序时,我没有看到任何组成原始表单的控件,只有一个空白页面 有什么想法吗?我真的不想从头开始重新实现他们的应用程序,那太糟糕了C# 将表单转换为用户控件,c#,winforms,user-controls,C#,Winforms,User Controls,我有一个我正在使用的第三方代码库;此库的一部分是winforms应用程序,用于编辑此库使用的配置文件。我想将他们的配置编辑器应用程序嵌入到我的应用程序中 我有他们库的源代码,而配置编辑器(据我所知)是一个使用标准控件的直接Winforms应用程序。我正在尝试将应用程序的主窗体转换为UserControl,这样我就可以在我的应用程序WPF中托管它(WPF的WindowsFormsHost不会托管窗体对象,我得到一个异常) 我将form对象更改为从UserControl而不是form继承,并修复了所
编辑:我忘了提到我在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。必须删除任何特定于表单的事件处理程序。我已经用一些表单完成了这项工作,效果很好。当您最初在设计器中打开表单时(在将其转换为用户控件之前),是否看到了所有控件?