• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 自制控件的属性保存(WriteProperties、ReadProperties  [我要投稿]

    日期:2004-12-10  地址:  作者:

       一年前,VB中在编制OCX控件时的一点心得,发出来一起共享。

       控件的属性在运行与设计模式切换时,属性值为丢失,可以要用WriteProperties来保存属性值,再用ReadProperties读取,具体情况如下:

       1、在设计模式往运行模式切换时,先用WriteProperties保存属性值,由于在运行时要使用该值,所以用ReadProperties读出。

       2、在结速运行状态切换到设计模式时,不需要保存控件在运行状态的值,所以不调用WriteProperties保存,而直接读取程序员在设计模式下的值。

       3、WriteProperties及ReadProperties事件只在设计调试中有效,编译为EXE文件后不再有效。此两事件及PropBag对象只是为了方便设计而存在。

    例程:
    '本控件是text与updown控件的结合,使用updown改变数据值
    '也可手工改变text值
    '
    '
    Dim m_UpMax As Long
    Dim m_DownMin As Long
    Dim m_value As Long
    Dim m_Enabled As Boolean

    Private Sub Text1_Change()
    On Error GoTo Err
    Dim txti As Long

    'txti用来零时保存text1值
    txti = CLng(text1.Text)
    If txti > UpDown1.Max Then
        text1.Text = UpDown1.Max
    End If
    If txti < UpDown1.Min Then
        text1.Text = UpDown1.Min
    End If
    txti = CLng(text1.Text)
    UpDown1.Value = txti
    Exit Sub

    Err:
    text1.Text = UpDown1.Value
    End Sub

     

    Private Sub UpDown1_Change()
    text1.Text = UpDown1.Value
    End Sub

    Private Sub UserControl_Resize()
    On Error Resume Next
    Dim t As Long
    Dim b As Long
    t = UserControl.Width - UpDown1.Width
    b = UserControl.Height - 1
    text1.Width = t
    text1.Height = b
    text1.Move 0, 0
    UpDown1.Move t, 0
    UpDown1.Height = b
    End Sub


    Public Property Get UpMax() As Long
    UpMax = m_UpMax
    End Property

    Public Property Let UpMax(ByVal vNewValue As Long)
    m_UpMax = vNewValue
    UpDown1.Max = m_UpMax
    PropertyChanged "UpMax"
    End Property

    Public Property Get DownMin() As Long
    DownMin = m_DownMin
    End Property

    Public Property Let DownMin(ByVal vNewValue As Long)
    m_DownMin = vNewValue
    UpDown1.Min = vNewValue
    PropertyChanged "DownMin"
    End Property

    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    Call PropBag.WriteProperty("UpMax", m_UpMax, 0)
    Call PropBag.WriteProperty("DownMin", m_DownMin, 0)
    Call PropBag.WriteProperty("Value", CLng(text1.Text), 0)
    Call PropBag.WriteProperty("Enabled", m_Enabled, True)
    End Sub

    Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    '使用PropBag.ReadProperty时一定要有默认值,否则如果没有在设计时改变过属性值(
    '即没有使用writeProperty保存属性值)就无法读取,会产生“运行时错误”

    m_UpMax = PropBag.ReadProperty("UpMax", 0)
    m_DownMin = PropBag.ReadProperty("DownMin", 0)
    m_value = PropBag.ReadProperty("Value", 0)
    m_Enabled = PropBag.ReadProperty("Enabled", True)
    UpDown1.Max = m_UpMax
    UpDown1.Min = m_DownMin
    UpDown1.Value = m_value
    UpDown1.Enabled = m_Enabled
    text1.Text = m_value
    text1.Enabled = m_Enabled
    End Sub


    Public Property Get Value() As Long
    Attribute Value.VB_UserMemId = 0
    m_value = CLng(text1.Text)
    Value = m_value
    End Property

    Public Property Let Value(ByVal vNewValue As Long)
    If vNewValue > m_UpMax Then
        m_value = m_UpMax
    ElseIf vNewValue < m_DownMin Then
        m_value = m_DownMin
    Else
        m_value = vNewValue
    End If
    text1.Text = m_value

    PropertyChanged "Value"
    End Property

    Public Property Get Enabled() As Boolean
    Enabled = m_Enabled
    End Property

    Public Property Let Enabled(ByVal vNewValue As Boolean)
    m_Enabled = vNewValue
    UpDown1.Enabled = m_Enabled
    text1.Enabled = m_Enabled
    PropertyChanged "Enabled"
    End Property

    你也可以点击这里下载控件源程序

       水平有限,欢迎交流 MSN:Equn_cn@hotmail.com

    自制控件的属性保存(WriteProperties、ReadProperties的评论   [查看评论]

    验证码:
    匿名发表: