¿Puedo alojar un Windows Form dentro de un control

Tengo un cliente que como un Proyecto de Visual Basic en modo de instancia única con una lógica de presentación con cable.

El formulario principal contiene un TabControl con múltiples TabPages. Si hago clic en TabPageA, se muestra otro formulario delante del Formulario y se cambia el tamaño para que tenga el mismo tamaño que TabPage.

Si hago clic en TabPageB, el primer formulario queda oculto y se muestra otro formulario. Básicamente, para el usuario parece que tiene un TabControl con diferentes TabPages, que no es el caso.

Traté de convertir los Formularios a UserControls y ponerlos dentro de la TabPage, pero, gracias a la aplicación SingleInstance, esto requeriría una gran cantidad de refactorización. Lo intenté pero finalmente me rendí debido a muchos errores de tiempo de ejecución y no quiero poner más esfuerzo en esto.

Mi idea era que, en tiempo de ejecución, podría agregar los formularios a TabPages y dejarlos actuar como UserControls, ¿esto es posible?

Puede convertir una clase de formulario en un control secundario estableciendo su propiedad TopLevel en False. Se convierte esencialmente en un UserControl con algunos gastos generales no utilizados. Haz que se vea similar a esto:

Public Class Form1 Public Sub New() InitializeComponent() Dim frm As New Form2 frm.TopLevel = False frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None frm.Visible = True frm.Dock = DockStyle.Fill TabPage1.Controls.Add(frm) End Sub End Class 

Cualquier ventana puede ser alojada en cualquier otra ventana (un Control es una ventana, técnicamente) usando SetParent .

  Public Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr End Function 

declarar y

 SetParent(FormToHost.Handle, ControlToHostForm.Handle) 

usar. Puede que no sea lo ideal, pero está bien si no quieres poner más esfuerzo en esto, como dices. Los formularios se maximizarán y minimizarán correctamente, y no se mostrarán en la barra de tareas, y se cerrarán con sus contenedores.

puedes usar paneles. en cada pestaña, diferentes paneles o paneles deben mostrarse unos a otros u otros deben estar ocultos.