如题

解决方案 »

  1.   

    好象在MSGBOX的第三个参数中有个枚举值可以改最简单的办法,自己作个窗体不就搞定了
      

  2.   

    同意,msgbox好像只能是模态.
    做个窗体的话似乎有点变态.
    gz
      

  3.   

    MsgBox是系统已经定义了的模态对话框,如果你想要非模态的,还是自己做一个吧。
      

  4.   

    msgbox只能是模态
    自己做一个把
      

  5.   

    我的一个程序中就要用到N多msgbox的地方,的Timer事件里的,没办法,自己做了一个,只要根据里面要显示的string来控制窗体的大小,写个函数,挺方便的
      

  6.   

    可以在要弹出的窗体里面设置public变量啊,在点击相应按钮赋给相应的值,然后再调用弹出窗体的过程中检测该值。你的弹出窗体用object 来引用,别直接用form,否则容易出问题
      

  7.   

    不用全局变量也可以呀,手段有很多:剪贴板文件映射临时磁盘文件DDE管道都可以
      

  8.   

    用API函数
    Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
      

  9.   

    关于从模态窗口返回值,以上几位推荐的方法都不是很好,全局变量不可避免的会带来代码的维护性问题,DDE、管道等似乎杀鸡用牛刀了。其实直接使用函数返回值即可。
    我们都知道,如果调用了 Form.show vbModal,那么这个调用会Block到窗口“关闭”才返回,但实际上,窗口隐藏的话,也是可以返回的,所以我的模态窗口,特别是用于获取某些参数的模态窗口一般都这么写:
    在模态窗口中新建一个函数:
    public function ShowModal (input arguments ... output arguments ) as long
        根据 input arguments 初始化本窗口
        me.show modal
        把放回值填入 output arguments
        unload me
    end function一般返回值用来表示是确定关闭还是取消关闭等,不同的窗口关闭方法。
    在 OK,Cancel 等事件中,一般用 me.Hide 而不是 unload me这样,需要调用某个模态窗口时,都象 ShowMessage 一样
    frmModal.ShowModal (arg1, arg2, arg3 .... ) 这样的程序,看起来更符合对象的封装原则。