0

私を助けてください..私はプロジェクトでmdiアプリケーションを使用しています。私の質問は、mdi の子が既に実行されているかどうかを確認する方法です..? 私を助けてください..

4

2 に答える 2

2

私は次の手法を使用しますが、フォームの種類ごとに特定の Sub が必要です (私は VB.NET を使用しています)。ただし、これを単純化してすべての子フォームを1つのサブで処理する方法があると確信しています

        Dim blExists As Boolean = False
        For Each f As Form In Me.MdiChildren
            If TypeOf (f) Is FormName Then
                f.Focus()
                blExists = True
                Exit For
            End If
        Next
        If Not blExists Then
            fAnalysis = New FormName
            fAnalysis.MdiParent = Me
            fAnalysis.Show()
        End If

次のサブはすべてのフォームで機能します。

Private Sub ShowNewForm(ByVal frmName As Form)
        Dim blExists As Boolean = False
        Dim f as Form
        For Each f In Me.MdiChildren
            If f.Name Is frmName.Name Then
                f.Focus()
                blExists = True
                Exit For
            End If
        Next
        If Not blExists Then
            f = DirectCast(New Form, frmName.Type)
            fAnalysis.MdiParent = Me
            f.Show()
        End If
End Sub
于 2010-12-02T14:15:23.900 に答える
0

MDIウィンドウを作成したとき、WM_MDICREATEを使用しましたか?そのメッセージはウィンドウハンドルを返します。後でウィンドウを見つけたり、ウィンドウが存在するかどうかを確認したりする場合に参照できるように、そのハンドルをどこかに保存する必要があります。

MDICREATESTRUCT mci;
// fill out mci...
HWND hwndChild = (HWND) SendMessage(hwndMDI, WM_MDICREATE, 0, (LPARAM)(ULONG_PTR)&mci); 

// save hwndChild so that I can use it later.
于 2010-03-03T02:42:01.257 に答える