2009-07-07 13 views
0

Ich habe ein MDI-Formular mit 3 verschachtelte Kinder mit drin. Im Moment kann nur noch eine neue Form angezeigt werden. Beispiel: Jedes Mal, wenn ich die Menüschaltfläche drücke, wird das neue untergeordnete Formular (Form1) erstellt. Jetzt, wenn ich die gleiche Menü-Taste ein zweites Mal oder ein weiteres Mal drücke, wird ein neues Form1 erstellt und es erscheint über dem vorherigen.MDI Child Formular Aufruf, nicht Generation

Was ich möchte ist, dass jedes Mal, wenn der Event-Handler ausgelöst wird (ein Menü Item_click auf das übergeordnete Formular), statt ein vollständig "neues" untergeordnetes Formular erstellt würde (ein neues Fenster erscheint) würde es stattdessen hochziehen das entsprechende untergeordnete Formular, das an den Auslöser angehängt ist.

Ich nehme an, es wäre etwas wie die Wiederverwendung eines Objekts.

Jede Hilfe würde sehr geschätzt werden.

Hier ist der Code-Beispiel verwende ich:

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() 

Antwort

0

Versuchen Sie, die folgenden (beachten Sie, dass ich VB .Net eine Zeit lang nicht getan haben, so dass die Syntax kann ausgeschaltet sein)

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

Ich denke, was Sie hier wollen, ist eine Variable auf Klassenebene für das Formular. So etwas wie -

'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 

diese Weise das erste Mal, wird der Menüpunkt angeklickt wird, wird eine neue Instanz von InventoryForm1 wird erstellt, danach, jedes Mal, wenn der Menüpunkt wird die ursprüngliche Instanz geklickt wird wieder geöffnet werden.

+0

Statisch ist hier der falsche Begriff. – SLaks

+0

Entschuldigung, Sie haben Recht, es muss nicht unbedingt eine statische (in Vb) Variable sein. (Obwohl es immer noch funktionieren würde) – Ben

+0

Es sei denn, Sie haben mehrere Instanzen des MDI-Parent (das ist, ich gebe zu, unwahrscheinlich) – SLaks