2009-07-07 5 views
0

MDI 폼에 3 개의 중첩 된 자식이있는 MDI 폼이 있습니다. 지금 당장 할 수있는 일은 새로운 양식을 제시하는 것입니다. 예 : 메뉴 단추를 누를 때마다 새 하위 폼 (Form1)이 만들어집니다. 이제 동일한 메뉴 단추를 두 번째 또는 그 이후에 누르면 Form1이 만들어지고 이전 메뉴 단추 위에 나타납니다.MDI 자식 폼 호출, 생성하지 않음

내가 원하는 것은 완전히 새로운 "자식"폼 (새 창이 팝업 됨) 대신 이벤트 처리기가 트리거 될 때마다 (부모 폼의 item_click 메뉴) 방아쇠에 첨부 된 적절한 자식 폼.

나는 그것이 물건을 재사용하는 것과 같을 것이라고 생각한다.

도움을 주시면 감사하겠습니다. 여기

내가 사용하고 코드 샘플입니다 :

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

답변

0

다음 시도 (나는 한 동안 VB 닷넷을하지 않은 메모를, 그래서 구문은 해제 될 수있다)

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

여기에 원하는 것은 폼의 클래스 수준 변수입니다. 같은 뭔가 -

'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 

그런 식으로, 메뉴 항목을 클릭 할 때 처음, InventoryForm1의 새로운 인스턴스는 그 후, 메뉴 항목을 클릭 할 때마다 원래의 인스턴스가 다시 열릴 것이다, 생성됩니다.

+0

정적이라는 것은 잘못된 용어입니다. – SLaks

+0

죄송 합니다만, 맞습니다. 반드시 정적 (Vb에서 공유 됨) 변수 여야합니다. (여전히 작동 할지라도) – Ben

+0

MDI 부모의 인스턴스가 여러 개있는 경우가 아니라면 – SLaks