我创建了一个自定义类,模仿文本框控件,但允许我在此控件中嵌入一个按钮。一切正常。
然而我的问题是我正在尝试设置一个公共属性,允许我将此按钮显示为可见(实际创建它),但我似乎无法解决为什么我的属性永远不会设置为True - 意思因为我已经实现了这段代码,所以我的按钮不再被绘制了。
我有以下代码:
Public Class CustomTextbox
Inherits TextBox
Private m_EnableSearch As Boolean
Private search_btn As Button
Public Sub New()
' This call is required by the designer.
Initialize()
End Sub
Private Sub Initialize()
search_btn = Nothing
'Draw the buttons
If EnableSearchButton = True Then CreateSearchButton() '<== This never equals True
End Sub
Private Sub CreateSearchButton()
search_btn = New Button()
...
...
End Sub
<Category("Appearance")> _
<Description("Enables the search button")> _
Public Property EnableSearchButton() As Boolean
Get
Return Me.m_EnableSearch
End Get
Set(value As Boolean)
Me.m_EnableSearch = value
Me.Invalidate()
End Set
End Property
End Class
如果我取消选中EnableSeachButton = True
并将其更改为CreateSearchButton
,则按钮会按预期显示。但是,即使我可以在设计视图中看到并更改EnableSearchButton属性,但当我单步执行代码时,它似乎永远不会成立。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
你的问题有点令人困惑。 EnableSearchButton
实际上是向控件添加了一个按钮,还是意味着切换所述按钮的Enabled
状态?要使按钮响应属性并切换启用状态,您需要设置按钮的状态:
Public Property EnableSearchButton() As Boolean
Get
Return Me.m_EnableSearch
End Get
Set(value As Boolean)
Me.m_EnableSearch = value
' to create the button when the prop is set:
If Value AndAlso search_btn IsNot Nothing Then
' create button
End If
If Value = False Then
' destroy button
End If
Me.Invalidate()
End Set
End Property
由于您似乎是在运行时创建按钮,因此必须在没有任何内容的情况下添加检查。由于构造函数只运行一次并且在创建时,因此无需测试EnableSearchButton
的状态,只需始终创建它。
如果你的Enabled属性实际上意味着像这个TB的AddButton,那么只需在ctor中传递一个布尔值:
Public Sub New(boolAddButton As Boolean)
If boolAddButton Then CreateSearchButton()
End Sub
您拥有它的方式,在创建控件时,后备字段m_EnableSearch
将始终为true。您在IDE中执行的任何道具设置都会在 创建控件后发生,这是您设置控件以创建按钮的唯一位置。