none
一个关于ActiveX控件的属性映射问题 (Visual Basic) RRS feed

  • 问题

  • 各位大侠,

    小弟初接触VB和ActiveX, 现在工作里要用Visual Basic 6.0 编写一个ActiveX控件(.ocx文件).

    这个ActiveX控件有Public Property X1,X2,...,X10, 全部是Boolean型. 而控件内部就只是一个Label, 名字为lblShow.

    这控件的功能是, 根据X1~X10的值(真或假), lblShow显示 不同的颜色(lblShow.Backcolor).

    我看了书之后, 会写这样的代码来取得X1~X10的输入值到内部变量varX1~varX10.

    ------------------------------------

    Public Property Let X1(ByVal newBool As Boolean)
        On Error GoTo HandleError
        varX1 = newBool
        PropertyChanged "X1"
        Exit Property
    HandleError:
        Call ReportError("Let X1", Err.source, Err.Description, "", 0)
    End Property

    Public Property Get X1() As Boolean
        On Error GoTo HandleError
        X1 = varX1
        Exit Property
    HandleError:
        Call ReportError("Get X1", Err.source, Err.Description, "", 0)
    End Property 
    ...
    ...
    ------------------------

    现在我想写那些颜色变化的逻辑代码. 它应该象这样的.

    if(varX1 and varX3) lblShow.BackColor=Red
    else if (varX2 and varX4) lblShow.BackColor=Yellow
    else if ...
    end if

    现在我的问题是, 我不想把lblShow.BackColor映射到公共属性, 比如public property ShowColor 什么的. 因为我只想通过用外部的X1~X10的变化,来改变内部lblShow的颜色. 所以外部接口应该只有那10个X. 但是这样一来, 我就不知道该如何写代码, 来实现内部变色那段逻辑了.

    是否我一定得把它映射出去, 才能写这段逻辑? 类似这样

    Public Property Let ShowColor(byVal newColor as OLE_COLOR)
        varShowColor=NewColor
        if(varX1 and varX3) lblShow.BackColor=Red
    else if (varX2 and varX4) lblShow.BackColor=Yellow
    else if ...
    end if

    End Property

    Public Property Get ShowColor()
    ...
    End Property

    否则不这么弄, 我就不知道该在哪儿加这段逻辑了...

    请哪位大侠给指点一下迷津? 最好有个代码的样例结构, 不用太详细, 我就可以继续看书研究起来了.

    还有个问题就是, 那些Let和Get, 是必须成对使用吗? 我只用Let取进来X1~X10的值不行吗?

    我因为是新手, 所以不知道问题说清楚了没.

    先多谢了!

    2007年12月27日 17:23

答案

  • 你可以在属性改变同时设置颜色

     

    Public Property Let X1(ByVal newBool As Boolean)
        On Error GoTo HandleError
        varX1 = newBool
        PropertyChanged "X1"

        showcolor
        Exit Property
    HandleError:
        Call ReportError("Let X1", Err.source, Err.Description, "", 0)
    End Property

     

     

    private sub ShowColor()
        if(varX1 and varX3) lblShow.BackColor=Red
    else if (varX2 and varX4) lblShow.BackColor=Yellow
    else if ...
    end if

    End Property

     

     

    可以不成对,只写(let)或只读(get)

    2007年12月28日 0:43
    版主

全部回复

  • 你可以在属性改变同时设置颜色

     

    Public Property Let X1(ByVal newBool As Boolean)
        On Error GoTo HandleError
        varX1 = newBool
        PropertyChanged "X1"

        showcolor
        Exit Property
    HandleError:
        Call ReportError("Let X1", Err.source, Err.Description, "", 0)
    End Property

     

     

    private sub ShowColor()
        if(varX1 and varX3) lblShow.BackColor=Red
    else if (varX2 and varX4) lblShow.BackColor=Yellow
    else if ...
    end if

    End Property

     

     

    可以不成对,只写(let)或只读(get)

    2007年12月28日 0:43
    版主