我在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则得出的结果有很多重复,而且顺序也乱了。请问,应该怎么办??
2. 普通的窗口, 标题“第一季度”
3. 普通的窗口, 标题“总览表”用 Tiger_Zhao(VB老鸟) 的方法,则只得到:
第一季度
总览表无视 DataReport 预览窗口。
试着把 EnumChildProc 中的判断 If frm.hwnd = hwnd Then
childForms.Add frm
End If去掉,改成 childForms.Add frm则得出的结果有很多重复,而且顺序也乱了。请问,应该怎么办??
解决方案 »
- 分享判断是否在vb6 IDE环境中执行的函数
- 关于Excsl 自动翻译程序的编写
- xml中如何创建节点并给节点的属性赋值。
- 无窗体的执行文件如何设置图标
- 两种方法那种好?
- 如何编写这一代码??请教!!!!
- 谁能给我发一个 信息网的策划书作为参考谢谢
- 如果手里有个createtable.sql文件了,在VB里面能不能调用它?我担心用户是不懂用“查询分析器”的。
- 求点是否在多边形内的算法!谢谢~!
- 可否这样定义数组Dim EB(1 To 1000000, 1 To 8) As Integer ''合格支数
- 关于软件安全的问题 向大虾们请教!急急急!
- 想在VB的DataGrid中显示记录时,把密码字段显示成***,怎么做?
而且,它不在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
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 进行查找