我在http://community.csdn.net/Expert/topic/5678/5678249.xml?temp=.8370478提问的问题遇到了新情况,再次请教。比如,如果 MDI 窗口有 3 个子窗口(按叠放次序从上到下排列)1.    DataReport 预览窗口,标题“打印预览 - 第一季度统计报告”
2.    普通的窗口,         标题“第一季度”
3.    普通的窗口,         标题“总览表”用 Tiger_Zhao(VB老鸟)  的方法,则只得到:
第一季度
总览表无视  DataReport 预览窗口。
试着把 EnumChildProc 中的判断            If frm.hwnd = hwnd Then
                childForms.Add frm
            End If去掉,改成                childForms.Add frm则得出的结果有很多重复,而且顺序也乱了。请问,应该怎么办??

解决方案 »

  1.   

    DataReport与普通窗体不同,它的ClassName是"ThunderDFrame",而不是"ThunderFromDC"
    而且,它不在MDIForm的Forms集合中
    如果你只有一个DataReport,糊弄一下可以这么改:
    Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
        Dim frm As Form
        Dim s As String
        s = WindowClassName(hwnd)
        If s = "ThunderFormDC" Then  '
            For Each frm In Forms
                If frm.hwnd = hwnd Then
                    childForms.Add frm
                End If
            Next
        ElseIf s = "ThunderDFrame" Then
            childForms.Add DataReport1
        End If
        EnumChildProc = 1
    End FunctionPrivate Sub Command1_Click()
        Dim childForms As Collection
        Dim frm As Object'这里原来是Dim frm As Form
        Set childForms = ListChildForms(MDIForm1)
        For Each frm In childForms
            Debug.Print frm.Caption
        Next
    End Sub
      

  2.   

    查找 DataReport 按照 yachong(蚜虫) 用 "ThunderFromDC"。
    DataReport的确不在 Forms 集合中,那么推荐定义一个全局集合 Reports,然后在每个 DataReport 中加入如下代码:
    ----------------------------------------
    Private Sub ActiveReport_Initialize()
        Reports.Add Me, "&H" & Hex(Me.hwnd)
    End SubPrivate Sub ActiveReport_Terminate()
        Reports.Remove "&H" & Hex(Me.hwnd)
    End Sub
    ----------------------------------------
    然后在 EnumChildProc 中对 "ThunderDFrame" 类用 Reports 进行查找