2009-07-07 3 views
0

J'ai un formulaire MDI avec 3 enfants imbriqués avec. En ce moment tout ce qu'il peut faire est d'afficher un nouveau formulaire. Par exemple: chaque fois que j'appuie sur le bouton de menu, le nouveau formulaire enfant (Form1) est créé. Maintenant, si j'appuie sur ce même bouton de menu une seconde fois ou plus, un nouveau Form1 est créé et il apparaît au-dessus du précédent. Ce que je voudrais, c'est que chaque fois que le gestionnaire d'événements est déclenché (un menu item_click sur le formulaire parent), au lieu d'un formulaire enfant complètement nouveau (une nouvelle fenêtre apparait) le formulaire enfant approprié attaché à la gâchette. Je suppose que ce serait quelque chose comme la réutilisation d'un objet.MDI Appel de formulaire enfant, pas de génération

Toute aide serait grandement appréciée.

est ici l'exemple de code J'utilise:

Private Sub RadMenuItem1_Click(ByVal sender As System.Object, ByVal e As_ 
System.EventArgs) Handles RadMenuItem1.Click 
Dim NewMDIChild As New InventoryForm1() 
'Set the Parent Form of the Child window.' 
NewMDIChild.MdiParent = Me 
'Display the new form.' 
NewMDIChild.Show() 

Répondre

0

Effectuez les opérations suivantes (notez que je ne l'ai pas fait VB .Net dans un certain temps, la syntaxe peut être désactivé)

Dim ChildInstances As New Dictionary(Of RadMenuItem, Form) 

Private Sub RadMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RadMenuItem1.Click 
    Dim ChildForm As Form 

    If Not ChildInstances.TryGetValue(RadMenuItem1, Out ChildForm) Then 
     Set ChildForm = New InventoryForm1() 
     ChildForm.MdiParent = Me 
     ChildInstances.Add(RadMenuItem1, ChildForm) 
    Else If ChildForm.Disposed Or Not ChildForm.Visible Then 'The user closed the form 
     Set ChildForm = New InventoryForm1() 
     ChildForm.MdiParent = Me 
     ChildInstances(RadMenuItem1) = ChildForm 
    End If 

    ChildForm.Show() 
End Sub 
1

Je pense que ce que vous voulez ici est une variable de niveau classe pour le formulaire. Quelque chose comme -

'Class level (outside of a method) 
Dim NewMDIChild As InventoryForm1 

Private Sub RadMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles RadMenuItem1.Click 

if (NewMDIChild Is Nothing) Then 
    NewMDIChild= New InventoryForm1 
    NewMDIChild.MdiParent = Me 
End if 

newFrm.Show() 
End Sub 

De cette façon, la première fois l'élément de menu est cliqué, une nouvelle instance de InventoryForm1 sera créé, après cela, chaque fois que sera réouverte l'élément de menu est cliqué l'instance d'origine.

+0

Statique est le mauvais terme ici. – SLaks

+0

Désolé, vous avez raison, il ne doit pas nécessairement être une variable statique (partagée en Vb). (bien que cela fonctionnerait toujours) – Ben

+0

Sauf si vous avez plusieurs instances du parent MDI (ce qui est, je l'avoue, improbable) – SLaks

Questions connexes