代码之家  ›  专栏  ›  技术社区  ›  Woody1193 Nimmi Rashinika

.NET重写窗体文本属性

  •  0
  • Woody1193 Nimmi Rashinika  · 技术社区  · 6 年前

    我有张表格叫 MyForm 继承自 Windows.Forms.Form TextBox 打电话 _msgBox . 现在,当我设置 Text 我的窗体 _消息框 财产。为此,我编写了一个简单的属性:

    Public Overloads Property Text As String
        Get
            Return _msgBox.Text
        End Get
        Set(value As String)
            _msgBox.Text = value
        End Set
    End Property
    

    然而,这并没有起作用。所以,我用我的googlefu找到了 this forum post ,此时我将代码更改为:

    <Browsable(True)>
    <EditorBrowsable(EditorBrowsableState.Always)>
    <Bindable(True)>
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
    Public Overloads Property Text As String
        Get
            Return _msgBox.Text
        End Get
        Set(value As String)
            _msgBox.Text = value
        End Set
    End Property
    

    这仍然没有解决问题,所以我在这里检查了一下,发现 this question ,这表明我还需要设置base属性。我这样做了,我的代码现在看起来是这样的:

    <Browsable(True)>
    <EditorBrowsable(EditorBrowsableState.Always)>
    <Bindable(True)> 
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
    Public Overloads Property Text As String
        Get
            Return _msgBox.Text
        End Get
        Set(value As String)
            MyBase.Text = value
            _msgBox.Text = value
        End Set
    End Property
    

    但我还是没看到这房子被设置好。当我打电话的时候 MyForm.Text ,底座 属性已设置,但我的内部属性仍然未设置。我怎样才能解决这个问题?

    2 回复  |  直到 6 年前
        1
  •  2
  •   jmcilhinney    6 年前

    我刚做了一些测试,结果很好:

    Public Overrides Property Text As String
        Get
            Return If(TextBox1 Is Nothing, MyBase.Text, TextBox1.Text)
        End Get
        Set
            MyBase.Text = Value
            TextBox1.Text = Value
        End Set
    End Property
    

    TextBox 仅当它存在时才存在并使用它,否则它将使用窗体。我从这个开始:

    Return TextBox1.Text
    

    我得到了一个 NullReferenceException 可能是因为 Text 属性值在 文本框 已创建。

        2
  •  1
  •   HardCode    6 年前

    这比你正在尝试的要简单得多。只需通过窗体的TextChanged事件更改TextBox的文本:

    Public Class Form1
    
        Private Sub Form1_TextChanged(sender As Object, e As EventArgs) Handles Me.TextChanged
            TextBox1.Text = Me.Text
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.Text = "My New Text"
        End Sub
    
    End Class
    

    在窗体上尝试此操作,当窗体加载时,TextBox将具有与窗体相同的文本。