积极答复者
一个关于ActiveX控件的属性映射问题 (Visual Basic)

问题
-
各位大侠,
小弟初接触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 PropertyPublic 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 ifEnd Property
Public Property Get ShowColor()
...
End Property否则不这么弄, 我就不知道该在哪儿加这段逻辑了...
请哪位大侠给指点一下迷津? 最好有个代码的样例结构, 不用太详细, 我就可以继续看书研究起来了.
还有个问题就是, 那些Let和Get, 是必须成对使用吗? 我只用Let取进来X1~X10的值不行吗?
我因为是新手, 所以不知道问题说清楚了没.
先多谢了!
答案
-
你可以在属性改变同时设置颜色
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 Propertyprivate sub ShowColor()
if(varX1 and varX3) lblShow.BackColor=Red
else if (varX2 and varX4) lblShow.BackColor=Yellow
else if ...
end ifEnd Property
可以不成对,只写(let)或只读(get)
全部回复
-
你可以在属性改变同时设置颜色
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 Propertyprivate sub ShowColor()
if(varX1 and varX3) lblShow.BackColor=Red
else if (varX2 and varX4) lblShow.BackColor=Yellow
else if ...
end ifEnd Property
可以不成对,只写(let)或只读(get)