• 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"这个属性了。呵呵~是不是很简单呢。

  • 相关阅读:
    给表弟写的Python制作GUI学生管理系统毕设,老师直接给出满分,毕业稳了
    有孚网络混合云,加速企业数字化转型升级
    如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码
    鼎捷前端开发校招岗技术面面经(已过)
    优化Java中XML和JSON序列化
    字符串基础面试题
    CentOS 6服务器升级Git时, 下载依赖包失败,需配置国外Yum源
    Linux如何写C语言
    安卓页面绘制流程(3)Window注册
    C++对象和类概述
  • 原文地址:https://blog.csdn.net/ty5858/article/details/126366061