Posso ospitare un Windows Form all’interno di un controllo

Ho un cliente che come progetto di Visual Basic in modalità istanza singola con una logica di presentazione cablata.

Il modulo principale contiene un TabControl con più TabPages. Se faccio clic su TabPageA, viene visualizzato un altro modulo davanti al modulo e ridimensionato per avere le stesse dimensioni di TabPage.

Se faccio clic su TabPageB, il primo modulo è nascosto e viene visualizzato un altro modulo. Quindi, fondamentalmente per l’utente sembra che tu abbia un TabControl con TabPages diversi che non è il caso.

Ho provato a convertire i moduli in UserControls e inserirli in TabPage, ma, grazie all’app SingleInstance, questo avrebbe richiesto molto tempo per il refactoring. L’ho provato, ma alla fine ho rinunciato a causa di molti errori di runtime e non voglio fare altro sforzo in questo.

Il mio ideam era che, durante il runtime, potevo aggiungere i moduli ai TabPages e lasciarli agire come UserControls, è ansible?

È ansible trasformare una class Form in un controllo figlio impostando la proprietà TopLevel su False. Diventa essenzialmente un UserControl con alcuni overhead inutilizzati. Falla sembrare simile a questo:

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 

Qualsiasi finestra può essere ospitata in qualsiasi altra finestra (un controllo è una finestra, tecnicamente) utilizzando SetParent .

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

dichiarare e

 SetParent(FormToHost.Handle, ControlToHostForm.Handle) 

usare. Potrebbe non essere l’ideale, ma va bene se non vuoi fare altro sforzo in questo, come dici tu. I moduli verranno ingranditi e ridotti a icona correttamente e non verranno visualizzati nella barra delle applicazioni e verranno chiusi con i relativi contenitori.

puoi usare i pannelli. in ogni scheda devono essere mostrati un pannello o pannelli diversi e l’altro o altri devono essere nascosti.