源代码的软件工程师他定义变量的格式很怪,
Private m_strSpecNo As String '光谱仪的编号
Public Property Get strSpecNo() As String '光谱仪的编号
    strSpecNo = m_strSpecNo
End Property
已经声明了怎么用Property Get把成员变量传到函数中呢

解决方案 »

  1.   


    Property Get 语句      声明 Property 过程的名称,参数以及构成其主体的代码,该过程获取一个属性的值。语法[Public | Private | Friend] [Static] Property Get name [(arglist)] [As type]
    [statements]
    [name = expression]
    [Exit Property] 
    [statements]
    [name = expression]End PropertyProperty Get 语句的语法包含下面部分:部分 描述 
    Public 可选的。表示所有模块的所有其它过程都可访问 Property Get 过程。如果在包含 Option Private 的模块中使用,则该过程在该工程外是不可使用的。 
    Private 可选的。表示只有包含其声明的模块的其它过程可以访问该 Property Get 过程。 
    Friend 可选的。只能在类模块中使用。表示该 Property Get 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。 
    Static 可选的。表示在调用之间保留该 Property Get 过程的局部变量的值。Static 属性对在该 Property Get 过程外声明变量不会产生影响,即使过程中也使用了这些变量。 
    name 必需的。Property Get 过程的名称;遵循标准的变量命名约定,但不能与同一模块中的 Property Let 或 Property Set 过程同名。 
    arglist 可选的。代表在调用时要传递给 Property Get 过程的参数的变量列表。多个变量则用逗号隔开。Property Get 过程中的每个参数的名称和数据类型必须与相应 Property Let 过程(如果存在)中的参数一致。 
    type 可选的。该 Property Get 过程的返回值的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。任何类型的数组都不能作为返回值,但包含数组的 Variant 可以作为返回值。 
    Property Get 过程的返回值类型必须与相应的 Property Let 过程(如果有)的最后一个(有时是仅有的)参数的数据类型相同,该 Property Let 过程将其右边表达式的值赋给属性。
     
    statements 可选的。Property Get 过程体中所执行的任何语句组。 
    expression 可选的。Property Get 语句所定义的过程返回的属性值。 
    其中的 arglist 参数的语法及语法的各个部分如下:[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]部分 描述 
    Optional 可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的后续参数都是可选的,而且必须都使用 Optional 关键字声明。 
    ByVal 可选的。表示该参数按值传递。 
    ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。 
    ParamArray 可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal、ByRef 或 Optional 一起使用。 
    varname 必需的。代表参数的变量名称;遵循标准的变量命名约定。 
    type 可选的。传递给该过程的参数的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object 或 Variant。如果参数不是 Optional,则也可以是用户自定义的类型,或对象类型。 
    defaultvalue 可选的。任何常数或常量表达式。只在 Optional 参数时是合法的。如果类型为 Object,则显式的缺省值只能是 Nothing。 
    说明如果没有使用 Public,Private 或 Friend 显式指定,则 Property 过程缺省为公用。如果没有使用 Static,则在调用之后不会保留局部变量的值。Friend 关键字只能在类模块中使用。Friend 过程可以被工程中的任何模块的过程访问。Friend 过程不会在其父类的类型库中出现,且 Friend 过程不能被后期绑定。所有的可执行代码都必须属于某个过程。不能在别的 Property、Sub 或 Function 过程中定义 Property Get 过程。Exit Property 语句使执行立即从一个 Property Get 过程中退出。程序接着从调用该 Property Get 过程的语句下一条语句开始执行。在 Property Get 过程中的任何位置都可以有 Exit Property 语句。Property Get 过程与 Sub 和 Property Let 过程的相似之处是:Property Get 过程是一个可以获取参数,执行一系列语句,以及改变其参数的值的独立过程,而与 Sub 和 Property Let 过程不同的是:当要返回属性的值时,可以在表达式的右边使用 Property Get 过程,这与使用 Function 或属性名的方式一样。====================================================================================m_strSpecNo是模块级变量Property Get 过程返回模块级变量m_strSpecNo的值
      

  2.   

    Property Get 过程是在Active控件中,这样写就是方便外部调用UseControl1.strSpecNo吧,
    而m_strSpecNo是Active控件使用吧???
      

  3.   

    to 楼上,
    是的, m_strSpecNo是内部使用的, 你见不到
    你能见到的只是usercontrol1的属性,方法, 事件等。
    你读usercontrol1.strSpecNo属性, 看到是读!
    那么则会调用
    Public Property Get strSpecNo() As String '光谱仪的编号
        strSpecNo = m_strSpecNo
    End Property那么其实你也就是获取到了m_strSpecNo这个内部值。当然, 你定义m_strSpecNo的时候可以用public定义
    就可以直接访问了, 但是那样缺少封装性
      

  4.   

    Public Property Let Caption(ByVal vNewvalue As Variant) End Property Public Property Get Caption() As Variant End Property 
    Property Get 和 Property Let 是两个相对的属性,Get 过程是当取该属性的值的时候被调用的,你可以在里面写一些适当的运算然后把结果返回,即赋给该属性名,其实就像函数一样;而 Let 过程是当赋值给该属性时被调用的,vNewvalue 是被赋的值,你可以把得到的 vNewvalue 的值按自己的需要作任何用途。如果你手动输入上面的代码,你要确保 Get 和 Let 后面的属性名应该相同,类型也要相同,如果你是通过自动生成得到代码的,你在修改时也要注意类型。如果你希望建一个只读的属性,只要把 Let 过程删除就行了。不要被自动生成的名字 vNewvalue 所束缚,你应该改一个更好的参数名,比如 sNewCaption 或 sCaption。因为我们的 Caption 将要用作标签的标题,就像 Label 控件的 Caption 属性,所以我们把类型定为 String