我有一个用户控件,其中包含一个面板,其中包含一个文本框。我已经覆盖了UserControl的Text属性,因此我可以公开TextBox的Text属性。
<BindableAttribute(False)>
<EditorBrowsable(EditorBrowsableState.Always), Browsable(True), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), DefaultValue("")>
Public Overrides Property Text() As String
Get
Return txtText.Text
End Get
Set(value As String)
txtText.Text = value
End Set
End Property
这很有效,我可以使用属性在TextBox中设置Text值。我遇到的问题是,当我将控件添加到窗体时,控件的名称最终在TextBox中。每次我将此控件添加到窗体时,我需要手动转到Text属性并删除该值。我正在寻找一种方法来覆盖这种行为。当我将控件添加到窗体时,我希望Text值为String.Empty。
有什么想法吗?我花了几个小时环顾四周,但我找不到任何东西。我发现的很多线程都与ASP.NET有关。这是我正在使用的标准窗体。
由于
答案 0 :(得分:1)
Name
和Text
是两个不同的属性!
Name
会产生controlname1
之类的内容。也许您已经无意中将TextBox的Text
属性设置为UserControl中的"TextBox"
。在那里删除它!
<强>更新强>
似乎WinForms设计者正在自己添加这个文本。 你可以解决这个问题:
Imports System.ComponentModel
Imports System.Text.RegularExpressions
Public Class UserControl1
Private _designMode As Boolean
Public Sub New()
InitializeComponent()
_designMode = LicenseManager.UsageMode = LicenseUsageMode.Designtime
End Sub
<BindableAttribute(False)> _
<EditorBrowsable(EditorBrowsableState.Always), Browsable(True), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), _
DefaultValue("")> _
Public Overrides Property Text() As String
Get
Return txtText.Text
End Get
Set(ByVal value As String)
If Not _designMode OrElse _
Not Regex.IsMatch(value, Me.GetType().Name & "\d+") Then
txtText.Text = value
End If
End Set
End Property
End Class
如果我们处于设计模式并且值对应于控件名称加上数字,则不会设置文本。这可确保您仍可以在设计时设置文本。如果您不需要在设计时设置文本,则可以删除条件的正则表达式部分。