VB开发OCX控件的属性之自定义列表项

我们在开发OCX控件的时候,某些功能需要在属性中展示给用户选择,比如像下图窗体属性的边框样式一样:
在这里插入图片描述
那么像这样的下拉式列表是怎么编写的呢?其实很简单,我们在添加过程属性之前,自己定义一个列表类型,如下:
Public Enum Style
[None] = 0
[Fixed Single] = 1
[Sizable] = 2
[Fixed Dialog]=3
[Fixed ToolWindow]=4
[Sizable ToolWindow]=5
End Enum
“Style”是类的名称(自设),而这个类里面的“0-1-2-3-4-5”便是该类中包含的成员,“[]“中的字符串可以是中文或其他语言,但”=“后必须是数字,字符串和等号后的数字是对等的,在设计中可以用”[]“里的字符串或相应的数字相互对替。
以上就是一个拥有"0-5"个成员的类"Style”,接下来就可以写一个输入输出的属性了,但在这之前,我们得先以这个类定义一个变量,方便系统读写用户的设置,如下:
Dim Modality As Style
“Modality"为自定义的变量名称,而"Style"就是上面我们自己定义的类,这个变量声明"Modality"拥有类"Style"中的所有成员。
添加属性我们可以在菜单上的"工具”-“添加过程”,打开"添加过程"对话框,名称自设,比如"BorderStyle”,这个名称就是在我们的OCX控件属性中出现的名称,类型选"属性",范围选"公有的",若选择"私有的",“BorderStyle"是不会显示在属性页中的哦,如下图:
在这里插入图片描述
确定添加后,我们将其类型更改为"Style”,如下:
Public Property Get BorderStyle() As Style

End Property
Public Property Let BorderStyle(ByVal vNewValue As Style)

End Property
第一个函数Get表示输出(也就是显示用户选择的成员),第二个函数Let表示输入(也就是用户选择的结果输入),而"vNewValue"就是输入的数据,添加过程如下:
Public Property Get BorderStyle() As Style
BorderStyle = Modality
End Property
Public Property Let BorderStyle(ByVal vNewValue As Style)
Modality = vNewValue
'这里添加即时过程或者重绘过程等。
PropertyChanged “BorderStyle”
End Property
第一个输出的过程"BorderStyle = Modality"就是将"Modality"的数据传送给"BorderStyle",显示用户选择的结果;第二个"Modality = vNewValue"就是将用户输入的"vNewValue"数据存储到"Modality"变量中,而"PropertyChanged “BorderStyle”"这句告诉系统数据已经变动。
最后是属性怎么在设计时存储属性值的,要实现这个过程我们得用到UserControl中自带的两个读写事件:“WriteProperties"和"ReadProperties”,"WriteProperties"为存储属性值到内存中,而"ReadProperties"将存储的属性值从内存中读取出来。如下:
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty(“BorderStyle”, Modality, 0)
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
Modality = PropBag.ReadProperty(“BorderStyle”, 0)
End Sub
第一个存储属性值:
Call PropBag.WriteProperty(“属性名称”, 当前值, 初始化属性值)
第二个读取属性值:
读出的属性值 = PropBag.ReadProperty(“属性名称”, 初始化属性值)
注:属性名称可以是属性本身的名称,不是绝对的,也可在属性函数中定义其他的名称,但一定要一样的!
到这里一个OCX控件属性的编写就结束了,测试,打开Form窗体,在左边的部件栏中单击刚编写的UserControl控件图标,然后在Form窗体中拖出一个UserControl1控件,在这个控件的属性栏我们就可以看到"BorderStyle"这个属性了。呵呵~是不是很简单呢。

猜你喜欢

转载自blog.csdn.net/ty5858/article/details/126366061