как проверить, мди ребенок уже работает? - PullRequest
0 голосов
/ 03 марта 2010

, пожалуйста, помогите мне .. у меня есть приложение mdi, использующее проект. у меня вопрос, как проверить, мди ребенок уже работает или нет ..? пожалуйста, помогите мне ..

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Я использую следующую технику, но она требует определенного Sub для каждого типа формы (я использую VB.NET). Однако я уверен, что может быть способ упростить это, чтобы обрабатывать все дочерние формы с одним подпунктом

        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
0 голосов
/ 03 марта 2010

Когда вы создали окно 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.
...