Преобразовать форму в UserControl - PullRequest
4 голосов
/ 04 февраля 2010

У меня есть сторонняя библиотека кодов, которую я использую;Часть этой библиотеки представляет собой приложение winforms для редактирования файлов конфигурации, используемых этой библиотекой.Я хотел бы встроить их приложение редактора конфигурации в свое приложение.

У меня есть исходный код их библиотеки, и редактор конфигурации (насколько я могу судить) - прямое приложение Winforms, использующее стандартные элементы управления.Я пытаюсь преобразовать основную форму приложения в UserControl, чтобы я мог разместить ее в своем приложении, являющемся WPF (WindowsFormsHost WPF не будет размещать объект Form, я получаю исключение).

Я изменилобъект формы, наследуемый от UserControl вместо Form и исправляющий все ошибки компилятора (их было немного, только инициализации свойств, которых нет в UserControls), но происходит то, что мой недавно преобразованный элемент управления просто пуст.

Когда я запускаю свое тестовое приложение, я не вижу никаких элементов управления, составляющих исходную форму, просто пустую страницу.

Есть идеи?Я действительно не хочу повторно реализовывать их приложение с нуля, это было бы отстой.

Редактировать: я забыл упомянуть, что я тестирую это в приложении WinForms, а не WPF, чтобы просто получитьуправляйте работой, прежде чем пытаться использовать его из WPF.

Ответы [ 4 ]

6 голосов
/ 04 февраля 2010

Очевидно, что метод 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);
    }
  }
1 голос
/ 04 февраля 2010

Понятия не имею почему, но их метод InitializeComponent () в основном устанавливал для всех элементов управления Visible свойства значение False. Я предполагаю, что оно должно было использовать какое-то событие запуска формы, чтобы изменить их на видимое, которое не вызывается как UserControl, возвращая их видимости обратно к истинно исправленным.

0 голосов
/ 10 апреля 2019

Пока вы исправляете в коде конструктора любую ссылку на класс Form (закомментируйте, если вам необходимо выполнить откат), просто измените объявление класса с: Form на: UserControl. Любые специфичные для формы обработчики событий должны быть удалены. Я делал это с несколькими формами, и это работало просто отлично.

0 голосов
/ 03 августа 2012

У меня была похожая проблема, и отсутствовали только дополнительные элементы управления в InitializeComponent. как это

  this.Controls.Add(this.button1);
  this.Controls.Add(this.button2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...