none
VB2008 Winform自定义控件属性的生成顺序如何控制? RRS feed

  • 问题

  • VB2008 Winform中,自定义控件属性在.Designer.vb中生成的顺序如何进行控制呢?
    例如
    有自定义属性PropertyOne和PropertyTwo,但是PropertyOne有依赖于PropertyTwo,所以在.Designer.vb中,PropertyOne必须在设置完PropertyTwo后才能设置。
    因为在设计窗体,设置上PropertyOne和PropertyTwo的值后,在.Designer.vb中会写入相关的代码,请问如何控制它们的顺序?
    谢谢
    2008年10月12日 2:03

答案

  •  

    你好,

    我觉得要做到这一点只要在get和set的时候写一些逻辑就可以了:

    Code Snippet

        Public Class MyControl
     Inherits Control

      Private _p1, _p2 As String
      Private _set As Boolean
      <Browsable(True)> _
      Public Property Property1() As String
       Get
        Return Me._p1
       End Get
       Set(ByVal value As String)
        If value.ToString().Trim() <> String.Empty Then
         _set = True
        Else
          _set = False
          Me._p2 = String.Empty
        End If
        Me._p1 = value
       End Set
      End Property
      <Browsable(True)> _
      Public Property Property2() As String
       Get
        Return Me._p2
       End Get
       Set(ByVal value As String)
        If _set Then

         Me._p2 = value
        End If
       End Set
      End Property


    End Class

     

     

     

     

    2008年10月17日 9:07
    版主

全部回复

  •  

    你好,

    我觉得要做到这一点只要在get和set的时候写一些逻辑就可以了:

    Code Snippet

        Public Class MyControl
     Inherits Control

      Private _p1, _p2 As String
      Private _set As Boolean
      <Browsable(True)> _
      Public Property Property1() As String
       Get
        Return Me._p1
       End Get
       Set(ByVal value As String)
        If value.ToString().Trim() <> String.Empty Then
         _set = True
        Else
          _set = False
          Me._p2 = String.Empty
        End If
        Me._p1 = value
       End Set
      End Property
      <Browsable(True)> _
      Public Property Property2() As String
       Get
        Return Me._p2
       End Get
       Set(ByVal value As String)
        If _set Then

         Me._p2 = value
        End If
       End Set
      End Property


    End Class

     

     

     

     

    2008年10月17日 9:07
    版主
  • 是的,的确是可以在属性设置的时候加上辅助的控制代码。
    俺现在的做法是先判断是否完成了必要的初期话,设置相应的flag,在控件载入事件发生时,再对未能完成初期化的属性进行设置。
    但是很繁琐:(
    因为俺写的控件是继承自第三方控件,很多属性又相互依存的关系。
    如果有一种方法可以控制属性序列化到Designer.vb的位置,哪能省了好多控制代码。
    2008年10月20日 3:29