覆盖自定义控件的文本属性以使用文本框的文本会导致文本框默认显示控件的名称

时间:2013-10-15 15:55:14

标签: vb.net properties overrides

使用VB.net(2005),我正在创建一个包含文本框和按钮的自定义控件(文件夹选择器)。最近我添加了以下内容:

<Browsable(True), DefaultValue(""), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Overrides Property Text() As String
    Get
        Return Me.uiPath.Text
    End Get
    Set(ByVal value As String)
        Me.uiPath.Text = value
    End Set
End Property

我遇到的问题是,现在创建控件时,文本框始终默认显示控件的名称(而不是空白)。在调用Sub New后,看起来Text属性正在被更改,但是,我已经检查了设计器,我无法看到它在哪里这样做。

我知道更改属性的名称可以解决问题,但我想知道为什么会发生这种情况(我猜这与标准设计师有关?),如果有办法解决(或解决)它,同时仍然使用Text属性?

我不知道它是否有任何区别,但我使用的是自定义设计师:

Public Class FolderPickerDesigner
 Inherits Windows.Forms.Design.ControlDesigner

 Public Overrides ReadOnly Property SnapLines() As IList
    Get
        Dim SnapLinesList As ArrayList = TryCast(MyBase.SnapLines, ArrayList)

        If (Me.Control IsNot Nothing) AndAlso (Me.Control IsNot Nothing) Then
            Dim FP As FolderPicker = CType(Me.Control, FolderPicker)

            SnapLinesList.Add(New SnapLine(SnapLineType.Baseline, FP.uiPath.Bottom - 5, SnapLinePriority.Medium))
        End If

        Return SnapLinesList
    End Get
 End Property

End Class

任何帮助/想法将不胜感激。如果没有/无法解决,我会将最有用的帖子标记为答案......

1 个答案:

答案 0 :(得分:0)

Set(ByVal value As String)

If Me.DesignMode And (Environment.StackTrace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent")) Then Return

    BaseT.Text = value

End Set