【发布时间】:2017-08-03 18:09:05
【问题描述】:
希望这有一个简单的解决方法:
我为我的解决方案创建了一个自定义文本框。我向那个自定义控件添加了一个名为“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
但是,通过设置断点,我发现如果我在 Designer 上将“AllowEmpty”设置为 True,它在运行时仍然为 false。我错过了什么吗?
谢谢。
【问题讨论】:
-
尝试直接在自动实现的属性中设置默认值:
Public Property AllowEmpty As Boolean = True -
@AlexB。我不太明白为什么,但是在将代码更改为以下答案中的确切建议并将所有内容重新执行为 True(以及一些控件为 False)之后再次转到设计器,它最终按预期工作,但不是在施工时,即使在“真”和“0”出现的情况下,我也得到“假”。我不希望这种情况发生,你知道解决方法吗?
-
我猜是因为在设计器中设置的属性值没有在构造函数中初始化,而是在可覆盖的方法中初始化。请检查InitializeNewComponent是否正确。
-
它们由容器的设计者初始化。但是容器在构造之前不能设置控件的属性。似乎是鸡/蛋的情况。我认为不可能在构造函数中访问它们。