0

我有一个 MDI 表单,里面有 3 个嵌套的子级。截至目前,它所能做的就是显示一个新表单。例如:每次按下菜单按钮时,都会创建新的子窗体(Form1)。现在,如果我第二次或随后按下相同的菜单按钮,则会创建一个的Form1,它会出现在前一个的上方。

我想要的是每次触发事件处理程序(父表单上的菜单 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()
4

2 回答 2

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 实例,之后,每次单击菜单项时,都会重新打开原始实例。

于 2009-07-07T22:26:31.737 回答
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
于 2009-07-07T22:18:48.727 回答