(пересмотрено для качества контента)
Мы создали приложение на основе форм для клиента на основе его требований.В конце проекта они решили, что хотят, чтобы приложение функционировало как часть другого приложения Winforms таким образом, чтобы экраны содержались в больших формах.Они также хотели динамически загружать формы и другие элементы пользовательского интерфейса.Я решил попробовать просто динамически загружать формы внутри другой формы, тогда мне было неудобно переключать все формы на элементы управления.
Когда я загружаю форму динамически внутри другой формы или элемента управления контейнера,редактирование поведения компонентов внутренней формы изменяется.Редактирование текста в TextBox или ComboBox не позволяет мне выделять часть текста с помощью мыши, хотя я могу дважды щелкнуть, чтобы выделить весь текст в элементе управления.
FormChild form = new FormChild();
form.TopLevel = false;
form.Dock = DockStyle.Fill;
Controls.Clear();
Controls.Add(form);
form.Show();
Элементы управления работают, как и ожидалось, когдаЯ обычно показываю форму, используя Show () или ShowDialog (), но не в случае вложенности.
Будучи немного новичком в Winforms из лет MFC, у нас был опыт встраивания форм в элементы управления MFC с использованием FormView без проблем,так предполагалось, что это будет работать нормально с Winforms.Так не получилось.
РЕШЕНИЕ : Я должен был использовать пользовательский элемент управления в первую очередь.Я вручную переделал каждую форму в приложении, создал пустые элементы управления, вырезал и вставил InitializeComponent (), а также логику в пользовательский элемент управления.Что касается динамических компонентов, в настоящее время я создаю их во время выполнения или делаю их в IronPython.Четыре года спустя я оглядываюсь назад на этот вопрос, качая головой из-за ошибки новичка.
Кроме того, я обнаружил, что элементы управления внутри закрепляемых панелей хорошо работают в исходном сценарии, с которым я столкнулся.В частности, я начал использовать DevExpress 'DocumentManager и DockPanel.Моя неопытность в то время с Winforms поставила нас в беду;Я оставил этот вопрос на тот случай, если кто-то совершит ту же ошибку.