我正在寻找一种在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.
答案 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}中初始化所有属性之后运行所需的代码}。
BeginInit
和EndInit
都会运行。也就是说,每次在运行时以及对表单进行足够的更改之后都需要重建它。您确实需要保持组件代码的新鲜,因为在使用它时,VS在IDE中使用它的编译版本。
因此,经常重建并在看起来没有变化时进行清理。
答案 1 :(得分:0)
我唯一能够回答你问题的是在你的班级中设置一个自定义事件并在构造函数的末尾触发它