【问题标题】:Convert Form to UserControl将表单转换为用户控件
【发布时间】:2010-02-04 00:17:54
【问题描述】:

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

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

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

当我运行我的测试应用程序时,我看不到任何构成原始表单的控件,只是一个空白页。

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

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

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

    显然 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);
        }
      }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

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

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

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

      【讨论】:

        【解决方案4】:

        只要您在设计器代码中修复对 Form 类的任何引用(注释掉以防您需要回滚),只需将类声明从:Form 更改为:UserControl。必须删除任何特定于表单的事件处理程序。我一直在用一些表格来做这件事,而且效果很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-06
          • 1970-01-01
          • 2010-12-22
          • 2013-02-02
          相关资源
          最近更新 更多