有这么一段程序一直不懂请教高人
在class modules里定义了 classa.cls,并在其中定义了一成员函数public function classa_a(参数1,参数2 ,...)
在form1窗体中 声明 implements classa 并重写private function classa_a( 参数1,参数2 ,... )
在form2 窗体中
 Dim frm As classa
 Set IM = form1
 frm.classa 参数1,参数2 ,...既然用set IM=form1,为什么不能通过IM引用form1上的控件呢?
这里frm究竟是窗体还是类,frm是不是form1的一个实例呢?

解决方案 »

  1.   

    set IM = form1应为set frm = form1但是整个程序是可运行的而且运行结果是对的,但是我想引用窗体上的控件确得通过对象form1直接操作,这是为什么呢?
      

  2.   

    ....这个你这个类定义成form1的时候是不是form1已经加载了。你想要再建立一个form1的实例是不是?语法好像也有点问题你试试看下面语句Dim frm As Form
    Set frm = New Form1frm.show
    frm.text1.text="232dqweqwe"
      

  3.   

    frm.classa应为frm.a
    实在不好意思太马虎了,谢谢关注,如果答案满意的话我会给分的,虽说少了点,但我自己也不太宽裕frm并没有加载
    如果
    Dim frm As Form
    那么就不能引用
    classa中的成员函数a了
      

  4.   

    此处 classa 用作接口定义,
    变量 frm 显式声明为 classa 就只能访问属于接口声明的属性/方法。窗体属于特殊的类,所以 frm 即是窗体也是类。是 Form1 的实例。
      

  5.   

    Dim frm As classa
    set frm = form1 
    这样是不对的,classa 和 form 不是一个类的。
      

  6.   

    那为什么我把
    frm声明为form1不能对classa的成员函数引用呢,我在form1中也声明了classa,重载了a函数了
      

  7.   

    接口定义和显式声明就是为了通过对象的抽象化限定实例的访问。比如在这篇讨论中:
      ly012659 as 楼主
    那么就限定了
      ly012659.提问
    虽然可能在其它讨论中有
      ly012659.解答
      

  8.   

    .............
    在form2 窗体中 
     Dim frm As classa 
     Set IM = form1 
     frm.classa 参数1,参数2 ,... 这里怎么出来了IM?应该是frm吧?
      

  9.   

    或者,把声明修改成IM,然后再定义一个Form1类型的frm。frm为IM的实例,这样就可以使用其中的控件了。Option ExplicitDim IM As classa
    Private Sub Command1_Click()
        Dim frm As Form1
        Set IM = New Form1
        IM.a  'classa中的方法
        Set frm = IM
        frm.Show
        frm.Caption = Now
    End Sub
      

  10.   

    //既然用set IM=form1,为什么不能通过IM引用form1上的控件呢? 
    虽然两者的实例是相同的,但接口类型不一样//这里frm究竟是窗体还是类,frm是不是form1的一个实例呢? 
    我上面的代码中,frm是实现了classa接口的form1示例,但使用的时候要做类型的转换。