vb的forms集合中是否不包括由DataReport产生的报表窗口?那我如果想在DataReport窗口之外的别的窗口或模块中关闭此报表窗口该如何作?是否只能调用Api EnumWindow去关闭?请大家帮忙。

解决方案 »

  1.   

    你可以试试看看在不在forms,如果不在,知道报表窗口的类名也行
      

  2.   

    to 叶帆:
    不管DataReport窗口的MDIChild属性设为True或False,forms中均没有包括此窗口;另外,我用Spy++得到的那个DataReport窗口的类名为ThunderRT6DFrame,不知知道类名后,如何关闭此窗口,望赐教。
      

  3.   

    试试这几个API
    sendmessage findwindow("hunderRT6DFrame",vbnullstring),wm_close,0,0
      

  4.   

    to 叶帆:
    非常感谢你给我的回复,但是刚才我再用spy++捕捉那个窗口时,发现他的类名变成了ThunderDFrame,而且我用findwindow("hunderDFrame",vbnullstring)得到的窗口句柄为0。不知还有无其他方法,类名总在变,所以不能将其写在程序中。盼回!
      

  5.   

    我用GetClassName得到的类名是ThunderDFrame。你可以用EnumWindows列举所有窗体,
    然后用GetWindowThreadProcessId看一看是不是你的应用程序的进程中的,如果是,
    再想办法判断是不是报表窗体。如果是在你的VB应用程序中可以用unload datareport1之类的方法关闭。在应用程序之外我只能想到FindWindow和EnumWindows