2009-07-07 4 views
0

У меня есть форма MDI с 3-мя вложенными детьми. На данный момент все, что он может сделать, это отобразить новую форму. Например: каждый раз, когда я нажимаю кнопку меню, создается новая дочерняя форма (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 .NET в то время, так что синтаксис может быть выключен)

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

Смежные вопросы