在构造函数期间/之后限定类属性(子新)

时间:2014-10-10 03:15:18

标签: vb.net

我正在寻找一种在New()sub期间或之后获取属性值的方法。总的来说,虽然我想知道是否有一种方法可以在一个类完全启动其全部属性后自动调用某些代码。

在Sub New()期间,属性设置为其初始值,而不是在设计时设置的属性。

基本上我想知道是否可以设置类似于“Form Show”的事件,除了类。

代码:

Public Class Test
inherits Component

Public Event Initiated()

Public Sub New()
    MyBase.New()
    RaiseEvent Initiated()
End Sub

Private Sub OnInitiated() Handles Me.Initiated
    Debug.WriteLine(Max)
End Sub

Private _Max As Integer = 5
Public Property Max() As Integer
    Get
        Return _Max
    End Get
    Set(ByVal Value As Integer)
        _Max = Value
    End Set
End Property
End Class

注意:在设计视图中,“Max”属性的值设置为3.

2 个答案:

答案 0 :(得分:1)

使用构造函数的问题是设计器代码在创建对象后很好地设置了属性。但是,.NET Framework包含接口ISupportInitialize,它非常适合需要执行诸如有条件限定属性之类的控件和组件 - 例如在之后检查Value {{1} }和Min已设置。

易于使用:

Max

当您在最后一行按Enter键时,它将添加两个方法:

Imports System.ComponentModel

Public Class Test
    Inherits Component
    Implements ISupportInitialize

允许您这样做:

Public Sub BeginInit() Implements ISupportInitialize.BeginInit

Public Sub EndInit() Implements ISupportInitialize.EndInit

它的工作方式是VS将在控件/组件属性之后从设计器代码中调用它。如果您打开设计器代码,您将看到如下内容:

Public Sub New()
    MyBase.New()
End Sub

Public Sub EndInit() Implements ISupportInitialize.EndInit
    ' do whatever you want to do
    ' all properties will be initialized at this time
    ' e.g. Max will be the IDE value, not 5
    ...
End Sub

因此,您可以添加在 ' ctl declarations CType(Me.Test1, System.ComponentModel.ISupportInitialize).BeginInit() ' lots of code initializing controls Me.Label1.Name = "Label1" ... Me.Button1.Location = ... ... Me.Test1.Max = 3 ' yours will be there somewhere ' then at the end: CType(Me.Test1, System.ComponentModel.ISupportInitialize).EndInit() 方法中创建任何内容之前运行所需的任何代码,以及在{{1}中初始化所有属性之后运行所需的代码}。


每次运行设计器代码时,

BeginInitEndInit都会运行。也就是说,每次在运行时以及对表单进行足够的更改之后都需要重建它。您确实需要保持组件代码的新鲜,因为在使用它时,VS在IDE中使用它的编译版本。

因此,经常重建并在看起来没有变化时进行清理。

答案 1 :(得分:0)

我唯一能够回答你问题的是在你的班级中设置一个自定义事件并在构造函数的末尾触发它