VB中一个窗体A  show另一个窗体B,当B unload me 时,想把窗体中的某些变量的值传递给窗体A 
除了定义public 变量外,还有没有其它的好办法!

解决方案 »

  1.   

    用窗体属性可以实现,如:
    '退出标志
    Public Property Get Flag() As Boolean
        Flag = mFlag
    End Property
      

  2.   

    Dim mFlag As BooleanPublic Property Get Flag() As Boolean'取得
        Flag = mFlag
    End Property
    Public Property Let Flag(vData as Boolean)'设置
        mFlag=vData
    End Property
      

  3.   

    窗体的Tag属性可以存储一些东西的
    可以让FormB 先ShowModal然后在B中改变A的Tag属性暂存
      

  4.   

    我一般还是通过public 来实现,不过有时就直接运用的控件或是函数
      

  5.   

    你可以通过窗体直接传输,这种方式不但可以传送变量,还可以执行窗体的方法。但前提是,你这个变量必须是窗体的模块级变量,不能是事件或sub子程中的私有变量。例如:
    在窗体A中定义了如下变量:
    dim Abl as integer
    (其他事件或过程代码)
    在窗体B中,可以这个传送变量的值给Abl变量:
    A.Abl=B.with
    这样就把B.with这个值传给A.Abl,此时,A窗体必须是打开的。这种方法不能传送变量值给A窗体的私有变量,但可以这样解决:
    设要把B窗体with属性的值传给A窗体的Asub过程,在定义Asub可以这样做:
    sub Asub(Abl as integer)
      dim AcL as integer
      ……
      AcL=Abl
      ……
    end sub
    在B窗体中调用它时,可以这样:
    A.Asub(B.with)
    这时,如果A窗体是关闭的,将会打开A窗体,并执行Asub过程中的代码;如果A窗体是打开的,将直接执行Asub过程中的代码。
      

  6.   

    似乎没有更好的办法
    Option Explicit
    Dim mblnOK As Boolean '用户单击了哪个按钮
    Dim mstrRet As StringPrivate Sub cmdCancel_Click()
        mblnOK = False
        Unload Me
    End Sub'被frmRegister调用的函数
    Public Function ShowXYS(ByVal enuOperation As OperationType, Optional ByVal strXYS As String) As String
    On Error GoTo ErrMsg
        Dim Status
        Dim arrXYS
        
        ...
        
        '显示窗体
        Me.Show vbModal
        
        '查看返回值
        If mblnOK = True Then
            ShowXYS = mstrRet
        End If
        
        Exit Function
    ErrMsg:
        
    End Function....