放下表单时,复合控件文本框默认控件名称

时间:2014-12-03 19:51:07

标签: vb.net custom-controls

我有一个用户控件,其中包含一个面板,其中包含一个文本框。我已经覆盖了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有关。这是我正在使用的标准窗体。

由于

1 个答案:

答案 0 :(得分:1)

NameText是两个不同的属性!

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

如果我们处于设计模式并且值对应于控件名称加上数字,则不会设置文本。这可确保您仍可以在设计时设置文本。如果您不需要在设计时设置文本,则可以删除条件的正则表达式部分。