原来 VB6 真的可以 办到 Set A = B : A = B

quickcccc 2009-01-07 09:39:12
http://topic.csdn.net/u/20090106/14/db870955-d987-4c32-9508-bb7307fceab5.html

' Form1

Private Sub Form_Load()

Dim B As New Class1

Set A1 = B(22) ' 执行成功
A2 = B(22) ' 执行失败

Exit Sub

原本以为 Vb6 是无法办到的

但后来却发现 VB6 是可以办到的 , 还真是有趣啊

改了几个地方后

Private Sub Form_Load()

Dim B As New Class1

Set A1 = B(22) ' 执行成功 --> 只传 参数 22 一次
A2 = B(22) ' 执行成功 , 用 F8 step by step 观察后 , 看到这一步出现很有趣的现象
' --> 先传 参数 22 一次 ---> 再 "递回" 传入一次 IsMissing 型态 的参数
' 而且 A = B(22) 出来后 , 用 区域变数视窗 观察
' 发现 "A2 型态竟然是个 对象 (Object)"
' 就以往认知 对象赋值 一定要用 Set A2 = 对象(Object) ,
' 可是这里竟然办到 A2 = 对象(Object) 在 没有 Set 关键字下 , 却能办到 "对象赋值"

Exit Sub

...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
quickcccc 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Modest 的回复:]
Private m_My As Variant

Public Property Get My(ByVal v As Integer) As Variant
If IsObject(m_My) Then
Set My = m_My
Else
My = m_My
End If
MsgBox v
End Property
[/Quote]

没错 差不多了

但是 Private m_My As Variant 是 Private m_My As Collection

请观赏图片解说

http://p15.freep.cn/p.aspx?u=v20_p15_p_0901080045537098_0.gif
三楼の郎 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 quickcccc 的帖子:]
http://topic.csdn.net/u/20090106/14/db870955-d987-4c32-9508-bb7307fceab5.html

' Form1

Private Sub Form_Load()

Dim B As New Class1

Set A1 = B(22) ' 执行成功
A2 = B(22) ' 执行失败

Exit Sub

原本以为 Vb6 是无法办到的

但后来却发现 VB6 是可以办到的 , 还真是有趣啊

改了几个地方后

Private Sub Form_Load()

Dim B As New Class1

Set A1 = B(22…
[/Quote]

A2=B(22)能办到的前提是不申明A2或者把A2申明为Variant型,这样VB会自动根据B(22)返回的类型来决定A2的类型,这个时候使不使用Set都一样。
quickcccc 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 CityBird 的回复:]

A2=B(22)能办到的前提是不申明A2或者把A2申明为Variant型,这样VB会自动根据B(22)返回的类型来决定A2的类型,这个时候使不使用Set都一样。

[/Quote]

Private Sub Form_Load()

Dim C As Variant

Call B(C)

Dim A2 As Variant

Set A2 = C '
A2 = C ' 执行出错 那为何这个就办不到
' 已经依照您的方法把 A2 申明为Variant型 , 烦请告知答案


End Sub


Sub B(C As Variant)

Set C = New Collection

C.Add "AAA", "1"
C.Add "BBB", "2"

End Sub


迈克揉索芙特 2009-01-07
  • 打赏
  • 举报
回复

'在类中:
Private m_My As Variant

Public Property Get My(ByVal v As Integer) As Variant
If IsObject(m_My) Then
Set My = m_My
Else
My = m_My
End If
MsgBox v
End Property



'在窗体中
Private Sub Form_Load()
Dim c As New Class1
Dim obj
obj = c(100)
End Sub


楼主说的是这个意思吗?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧