希望这有一个简单的解决方法:
我为我的解决方案创建了一个自定义文本框。对于该自定义控件,我添加了一个名为" AllowEmpty":
的自动属性Public Property AllowEmpty As Boolean
我的构造函数和事件都读取了该属性的值并采取相应的行动:
Public Sub New()
If AllowEmpty Then
Text = String.Empty
Else
Text = "0"
End If
End Sub
Private Sub CustomTextBox_TextChanged(sender As Object, e As EventArgs) Handles Me.TextChanged
If AllowEmpty Then
Text = String.Empty
Else
Text = "0"
End If
End Sub
然而,通过设置断点,我看到如果我设置" AllowEmpty"在Designer上为True,它在运行时仍然是假的。我错过了什么吗?
感谢。
答案 0 :(得分:4)
如果尝试在组件的构造函数中访问设计时自定义属性,那么事情发生的顺序对您不利。
假设此CustomTextBox位于Form1上,则会发生以下情况:
Form1.InitializeComponent()
Me.components = New System.ComponentModel.Container()
Form1.InitializeComponent()
然后在InitializeComponent()
中使用此代码'CustomTextBox1
'
Me.CustomTextBox1.AllowEmpty = True ' <--- that is the designer set value
Me.CustomTextBox1.Location = New System.Drawing.Point(12, 12)
Me.CustomTextBox1.Name = "CustomTextBox1"
Me.CustomTextBox1.Size = New System.Drawing.Size(100, 20)
Me.CustomTextBox1.TabIndex = 0
' ...
如您所见,任何设计器集属性都在此处的代码中设置,在构造类之后。所以构造函数不是访问它们的最佳位置。
但您可以使用OnCreateControl
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If AllowEmpty Then
Text = String.Empty
Else
Text = "0"
End If
End Sub