.NET: как преобразовать форму окна в элемент управления Windows

17

У меня есть форма .NET 3.5, которую я бы хотел встроить в другую форму. Есть ли быстрый способ превратить эту форму в элемент управления?

Спасибо

    
задан Mr Grieves 01.04.2009 в 18:31
источник

4 ответа

35

Измените форму, чтобы наследовать от UserControl вместо Form, а затем исправить любые ошибки компиляции.

    
ответ дан Neil Barnwell 01.04.2009 в 18:33
источник
  • Только что нашел этот ответ, решив эту проблему сам. Удивительно, насколько это легко. –  Dan Tao 09.02.2010 в 20:20
  • Как бы это сделать в VB.NET? Форма просто объявляется как открытый класс TimeSheetGrid без явных наследований. –  ProfK 21.09.2012 в 09:05
  • В Visual Studio 2012 (по крайней мере) или с относительно простыми формами, которые я пробовал, делая это делает полезный код, но вы не можете открыть элемент управления в VS-дизайнере. Нет ошибок, но при открытии конструктора просто отображается список всех элементов управления, аналогично тому, как это делается для элементов диалогового окна / etc. но вы не видите макет управления. Если кто-нибудь знает, как это исправить, скажите! –  Quinxy von Besiex 06.01.2013 в 20:01
  • Невзирая на мой комментарий выше, я не видел, что существует огромное различие между Control и UserControl! Этот ответ сказал UserControl, но я использовал Control, и именно поэтому у меня возникла проблема. –  Quinxy von Besiex 06.01.2013 в 21:48
  • @ProfK для всех, кто придет к этому в будущем, в VB.net инструкция наследования находится в дизайнере –  majjam 08.07.2015 в 16:30
8

Существует также способ встраивания формы в элемент управления: Вот код в VB:

Public Shared Sub ShowFormInControl(ByRef ctl As Control, ByRef frm As Form)
    If ctl IsNot Nothing AndAlso frm IsNot Nothing Then
        frm.TopLevel = False
        frm.FormBorderStyle = FormBorderStyle.None
        frm.Dock = DockStyle.Fill
        frm.Visible = True
        ctl.Controls.Add(frm)
    End If
End Sub

Я думаю, что я приобрел этот код из другого сообщения SO, но я не могу вспомнить, где, извините, если это ваш фрагмент кода!

    
ответ дан Joey 01.04.2009 в 21:42
источник
  • То же самое работает на C #, очевидно. –  GWLlosa 01.04.2009 в 22:00
  • Я думаю, вам придется изменить некоторые вещи для работы на C #, иначе компилятор будет сердиться ... –  Joey 02.04.2009 в 22:25
0

Не говоря, что вы должны это сделать сейчас, но в будущем вы можете взглянуть на MEF . Его основой для (помимо всего прочего) построения композитных приложений, которые он звучит, может быть то, чего вы пытаетесь достичь.

    
ответ дан George Mauer 24.06.2009 в 19:51
источник
0

Я использовал решение @Neil Barnwell, с добавлением. Я вручную отредактировал файл .vbprog и изменил «SubType» формы на «UserControl»:

<SubType>UserControl</SubType>

Это позволяет значку в проводнике проекта показывать как пользовательский элемент управления, а не форму.

    
ответ дан Maculin 07.06.2016 в 15:44
источник