关于vb中类与窗体结合的问题

ly012659 2008-04-08 03:28:54
有这么一段程序一直不懂请教高人
在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的一个实例呢?
...全文
62 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ly012659 2008-04-09
明白了,结帖给分了,多谢哈
回复
//既然用set IM=form1,为什么不能通过IM引用form1上的控件呢?
虽然两者的实例是相同的,但接口类型不一样

//这里frm究竟是窗体还是类,frm是不是form1的一个实例呢?
我上面的代码中,frm是实现了classa接口的form1示例,但使用的时候要做类型的转换。
回复
或者,把声明修改成IM,然后再定义一个Form1类型的frm。frm为IM的实例,这样就可以使用其中的控件了。

Option Explicit

Dim 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
回复
.............
在form2 窗体中
Dim frm As classa
Set IM = form1
frm.classa 参数1,参数2 ,...

这里怎么出来了IM?应该是frm吧?
回复
Tiger_Zhao 2008-04-09
接口定义和显式声明就是为了通过对象的抽象化限定实例的访问。

比如在这篇讨论中:
  ly012659 as 楼主
那么就限定了
  ly012659.提问
虽然可能在其它讨论中有
  ly012659.解答
回复
ly012659 2008-04-08
那为什么我把
frm声明为form1不能对classa的成员函数引用呢,我在form1中也声明了classa,重载了a函数了
回复
gracexu 2008-04-08
Dim frm As classa
set frm = form1
这样是不对的,classa 和 form 不是一个类的。
回复
Tiger_Zhao 2008-04-08
此处 classa 用作接口定义,
变量 frm 显式声明为 classa 就只能访问属于接口声明的属性/方法。

窗体属于特殊的类,所以 frm 即是窗体也是类。是 Form1 的实例。
回复
ly012659 2008-04-08
frm.classa应为frm.a
实在不好意思太马虎了,谢谢关注,如果答案满意的话我会给分的,虽说少了点,但我自己也不太宽裕

frm并没有加载
如果
Dim frm As Form
那么就不能引用
classa中的成员函数a了
回复
shakoe 2008-04-08
....这个你这个类定义成form1的时候是不是form1已经加载了。

你想要再建立一个form1的实例是不是?语法好像也有点问题

你试试看下面语句

Dim frm As Form
Set frm = New Form1

frm.show
frm.text1.text="232dqweqwe"
回复
ly012659 2008-04-08
set IM = form1应为set frm = form1

但是整个程序是可运行的而且运行结果是对的,但是我想引用窗体上的控件确得通过对象form1直接操作,这是为什么呢?
回复
shakoe 2008-04-08
vb6 里面的类是伪类。 不能继承不能重载。
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-04-08 03:28
社区公告
暂无公告