比如现在存在a b 两个窗体,b中存在一个public 的 totext 的方法
现在我在a中用   fromshow= froms.add("b")  fromshow.show  1  方式打开了b  ,接着我要做的是将a中处理好的字符串传中b中totext 让其执行,但我发现这时无法处理,因为我无法找到b这个窗体。  
请不要用什么,固定引用之类的操作( XXX as a),因为b并不知道它调用自己的窗体

解决方案 »

  1.   

    在B的窗体LOAD事件中调用totext
      

  2.   

    ' 利用晚期绑定
    Private Sub Command1_Click()
        
        Dim fromshow   As Form
        Dim o          As Object
        
        Set f = Forms.Add("b")
        f.Show 1
        
        Set o = f
        o.totext "hello world"
        
    End Sub
      

  3.   

    我纠正一下,totext 是在a中的public
      

  4.   

    调整一下
    比如现在存在a b 两个窗体,a中存在一个public 的 totext 的方法
    现在我在a中用 fromshow= froms.add("b")  fromshow.show  1  方式打开了b  ,接着我要做的是将b中处理好的字符串传中a中totext 让其执行,但我发现这时无法处理,因为我无法找到a这个窗体。  请不要用什么,固定引用之类的操作( XXX as a),因为b并不知道它调用自己的窗体是什么
      

  5.   

    还是利用晚期绑定,把b中的数据作为属性返回给a,如:
        Set o = f
        a.totext o.MyProperty
      

  6.   

    阿花:现在我用的就是这样完成的,但会有一个问题是这样会产生一个新的窗体,对原有旧窗体上的数据无法响应比如说我想将b回传的字符显示在原来调用它的a的一个Text框中就不行了。这是个这问题的根本
      

  7.   

    属性变量不要直接使用控件的数据public property get MyProperty as string
        MyProperty = Me.Text1.Text
    end property
    和 
    private mvarMyProperty   as string
    public property get MyProperty as string
        MyProperty = mvarMyProperty
    end property是不一样的,最好使用第二种方法。
      

  8.   

    在b中这样声明private mvardata as stringpublic property get data as string
        data = mvardata
    end propertypublic property let data(byval vdata as string)
        mvardata = vdata
        text1.text = mvardata
    end propertyprivate form_unload (cancel as integer)
        mvardata = text1.text
    end sub
      

  9.   

    a  >Public Sub totext (ByVal str As String)  '取得查询数据L
        Test1.text=str
    b  > Dim frm As Form
     Set frm = Forms.Add(fmdname) 
         frm.totext psqlstr
         me.Unload 
    以上是我现程序中的使用,如果我用frm.show 1 数据在新的from中显示正常,但我现在想的是在原有调用的from中将数据显示上去
      

  10.   

    load fromshow
    '在这里把a窗体的对象传入b,再调用下面一句话显示b
    fromshow.show  1
      

  11.   

    调整一下
    比如现在存在a b 两个窗体(a窗体是一个呈现窗体,b是一个查询窗体)a窗体中存在一个public 的 totext 的方法程序原理
    1、程序运行只有a一个窗体。
    2、现在我在a中command_click用以下代码将 fromshow= froms.add("b") fromshow.show 1 方式打开了b窗体
    3、接着我要做的是将b中处理好的查询字符串传中a中totext 让其执行,将执行后的结果显示在a窗体的表格控件中。
    问题来了:我用以下代码无法取的效果
    b窗体代码> Dim frm As Form
    Set frm = Forms.Add(fmdname)
    frm.totext psqlstr
    frm.show 1
    me.Unload
    在frm.show 1 在程序中会新生成一个窗体,其中控件上显示数据,但我现在想的是在原有调用的a窗体中将数据显示上去,而不是a窗体新生成的副本上。
      

  12.   

    你怎么这么爱钻牛角尖呢?
    要把B中的数据送A,无非两种办法,一是我上面说的在B中声明属性从A中访问,而是在B中声明事件在A中接受。
    实在没搞懂打开个查询窗口为什么要用Forms.Add,想不通
      

  13.   

    明白了,你的问题出在这里:
    Dim frm As Form
    Set frm = Forms.Add(fmdname)
    估计你在打开B之前,forma已经unload了吧,这样的话,肯定会生成forma的一个新实例,解决办法:调整forma的Visible属性显示和隐藏窗体
      

  14.   

    我写了个例子这下应明白了吧。
    a.from
    Option ExplicitPrivate Sub Command1_Click()
    Dim frm As Form
    Set frm = Forms.Add("b")
    Text2.Text = "aaaa"'判断是否打开的是原窗体
    frm.ShowEnd SubPublic Sub totext(ByVal str As String)
      Text1.Text = str
    End Sub
    b.from
    Option ExplicitPrivate Sub Command1_Click()
    Dim frm As Form
    Set frm = Forms.Add("a")
    frm.totext "select * from sql"
    frm.Show
    End Sub
      

  15.   

    彻底被楼主搞晕了。
    没搞懂为什么要调两次Forms.Add
      

  16.   

    //不调用两次我怎么找到a窗体呢。遍历forms集合找啊
      

  17.   

    看楼主给的例子应该是要实现这样的:
       form a ;
       Option ExplicitPrivate Sub Command1_Click()
    Dim frm As Form
    Set frm = Forms.Add("b")
    Text2.Text = "aaaa"'判断是否打开的是原窗体
    frm.ShowEnd SubPublic Sub totext(ByVal str As String)
      Text1.Text = str
    End Sub
    b.from
    Option ExplicitPrivate Sub Command1_Click()
    Dim frm As Form
    set frm=a
    frm.totext "select * from sql"
    frm.Show
    End Sub
      

  18.   

    b.from
    Option ExplicitPrivate Sub Command1_Click()
        'Dim frm As Form
        'Set frm = Forms.Add("a") 
        '以上不要
        a.totext "select * from sql"
        a.Show
    End Sub是不是要这个?