0

ネストされた 3 つの子を持つ MDI フォームがあります。現時点でできることは、新しいフォームを表示することだけです。例: メニュー ボタンを押すたびに、新しい子フォーム (Form1) が作成されます。ここで、同じメニュー ボタンを 2 回目以降に押すと、新しいForm1 が作成され、前のボタンの上に表示されます。

私が望むのは、イベントハンドラーがトリガーされるたびに (親フォームの menu 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 に答える