| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 488 人关注过本帖
标题:刚学Class不久,遇到个问题难以解决,请高手指点不甚感激!!!
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:5 
刚学Class不久,遇到个问题难以解决,请高手指点不甚感激!!!
程序要怎改才能将Class中的结构传到Form 让MsgBox 秀出值?
结构定义一定要写在模块中吗?这样就变成模块和类模块要绑在一起才能使用~
不知道怎样才能写在类模块中~Form直接就可以接收到类模快中的结构~

Form1
程序代码:
Option Explicit

Dim QQQ As New Class1

Private Sub Form_Load()
    Call AAA
End Sub

Private Sub AAA()
    QQQ.Run
    WWW = QQQ.StructA
    MsgBox WWW.AA.BB.CC
End Sub


Module1
程序代码:
Option Explicit

Public Type CCC
    CC As String
End Type

Public Type BBB
    BB As CCC
End Type

Public Type AAA
    AA As BBB
End Type

Public WWW As Variant


Class1
程序代码:
Option Explicit

Private ABC As AAA
Private mvarStructA As Variant

Public Sub Run()
    Call Assign
End Sub

Public Property Let StructA(ByVal vData As Variant)
    mvarStructA = vData
End Property

Public Property Set StructA(ByVal vData As Variant)
    Set mvarStructA = vData
End Property

Public Property Get StructA() As Variant
    If IsObject(mvarStructA) Then
        Set StructA = mvarStructA
    Else
        StructA = mvarStructA
    End If
End Property

Private Function Assign() As Boolean
    ABC.AA.BB.CC = "123"
End Function
2011-05-04 00:57
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:20 
activeX Dll中的公共类模块中可以定义public的Type。
私有的类模块中好像不行,甚至用作public方法的参数或返回类型都不行。(不过可以用copymemory 绕过)
2011-05-04 09:17
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
是说我必须先建立一个ActiveX Dll工程~内含结构声明打包后~再建立一个执行档工程去引用那个DLL取得结构(公用型态)~才能让(Get或Let或Set) as 该结构并返回Form中的意思吗?

那用copymemory绕过又是什么意思?网路上有不少这函式的代码~只是能具体说明下要怎使用吗?

不要選我當版主
2011-05-04 11:02
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
收藏
得分:0 
建立一个类模块好了。然后在代码中直接调用类模块中的方法

成功贵在坚持
2011-05-04 12:38
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我就是要建立一个类~功能是将一段很复杂但重复性的资料分析动作写进去~
(这段已经写好了~原本我是写在FORM和MODULE里面~只是现在我要把它改写成一个类~因为每次因客户需求开发一支新的转档程式都需要约一个星期的时间~而主管认为一天内就要搞定~所以才会想用这种方法提高开发效率)

类中分析资料并填入一个自订结构中~最后再将​​结果传回调用这个类的使用者呼叫这个方法的位置~让程式设计者开发程式时~可以大幅缩短程式开发时间~只需将结构中的资料取出需要的部分~再重新排版即可~

经过jiashie高手的提示~已经成功一半了~只是还有问题~结构虽然传过去了~但是值(123)并没跟着过去~不知道问题是在哪?

FORM1
程序代码:
Option Explicit

Dim QQQ As New Class1

Private Sub Form_Load()
    Call AAA
End Sub

Private Sub AAA()
    QQQ.Run
    MsgBox WWW.AA.BB.CC
End Sub


Module1
程序代码:
Option Explicit

Public Type CCC
    CC As String
End Type

Public Type BBB
    BB As CCC
End Type

Public Type AAA
    AA As BBB
End Type

Public WWW As AAA


Class1
程序代码:
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As AAA, ByRef Source As AAA, ByVal Length As Long)

Private ABC As AAA

Public Sub Run()
    Call Assign
End Sub

Private Function Assign() As Boolean
    ABC.AA.BB.CC = "123"
    CopyMemory ABC, WWW, CInt(LenB(ABC))
End Function


可是自订结构还是得写在模块里做全域声明~真的要写成DLL再引用才能实现让类可以独立运作吗?
想让自订结构从类传出去时~对方接手的变量可以自动转成相同结构的型态~

[ 本帖最后由 wube 于 2011-5-4 13:09 编辑 ]

不要選我當版主
2011-05-04 13:05
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
原来是ABC和WWW写颠倒了~

不要選我當版主
2011-05-04 23:18
快速回复:刚学Class不久,遇到个问题难以解决,请高手指点不甚感激!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016241 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved