在一个主体窗口上打开一个无模式的子窗口,例如:
主窗口为mainform,子窗口为childform,则:childform.show 0,mainform,我想实现childform在mainform中是相当于childform.show 1的效果,但可以打开其他主窗口(我的软件是sdi结构),我用了API函数:EnableWindow可以实现,但问题就是:当我想从childform向mainform传递数据时,当中需要用户在childform弹出后作一些操作才能产生的数据,问题就来了,因为childform是无模式窗口,故在其启动后,跟在mainform中的“childform.show 0,mainform”语句后面的代码继续执行,用户都尚未操作,因此后面的语句调用的传递参数都为空,出现错误。
我想请问高手们,如何解决这个问题呢??拜托了!!

解决方案 »

  1.   

    有个笨办法:
    给childform设个公共属性,比如这样Public fClosed As Boolean
    Private Sub Form_Load()
    fClosed = False
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    fClosed = True
    End Sub然后在mainform里这样
    childform.show 0,mainform
    Do While Not childform.fClosed
        DoEvents
    Loop
    Debug.Print "Ok"
      

  2.   

    我也想过doevents,但很危险,因为我有很多主体窗口都会同时打开childform的副本,你觉得有没有问题?
      

  3.   

    childform.show 0,mainform
    Do While Not childform.fClosed
        DoEvents
    Loop
    Debug.Print "Ok"
    这个语句应该也不行,因为这个语句系统只会调用一次,用户在childform中操作完毕退出后也不可能回到上面那个循环语句吖
      

  4.   

    “在childform弹出后作一些操作才能产生的数据”后,在childform中调用mainform中的函数
      

  5.   

    我的childform是一个共享窗口,如果要调用mainform的函数,那岂不是每个主窗口都要设置一个一样的函数,公用的函数不能满足每一个主窗口喔
      

  6.   

    好象在childform中声明事件更合理一点
      

  7.   

    现在不是谈论MDIFORM和SDIFORM的问题,就算MDIFORM也不能实现我的功能吖
      

  8.   

    我有个想法:在模块中声明一个公用函数,这个函数调用childform,让childform在unload事件之后返回参数,问题是如何把参数付给公用函数呢?
      

  9.   

    //因为我有很多主体窗口都会同时打开childform的副本不解
      

  10.   

    即set xxx as new childform
    xxx.show 0,mainform
    明白了吗
      

  11.   

    在一个主体窗口上打开一个无模式的子窗口,例如:
    主窗口为mainform,子窗口为childform,则:childform.show 0,mainform,我想实现childform在mainform中是相当于childform.show 1的效果,但可以打开其他主窗口(我的软件是sdi结构),我用了API函数:EnableWindow可以实现,但问题就是:当我想从childform向mainform传递数据时,当中需要用户在childform弹出后作一些操作才能产生的数据,问题就来了,因为childform是无模式窗口,故在其启动后,跟在mainform中的“childform.show 0,mainform”语句后面的代码继续执行,用户都尚未操作,因此后面的语句调用的传递参数都为空,出现错误。
    我想请问高手们,如何解决这个问题呢??拜托了!!