.NET覆盖表单文本属性

时间:2018-09-20 16:39:14

标签: .net vb.net winforms inheritance

我有一个名为MyForm的表格,该表格是从Windows.Forms.Form继承的。在此表单上,我有一个名为TextBox的{​​{1}}。现在,当我在_msgBox上设置Text属性时,我实际上想设置MyForm的{​​{1}}属性。我写了一个简单的属性来做到这一点:

_msgBox

但是,这没有用。因此,我使用了Google-fu,并能够找到this forum post,这时我将代码更改为:

Text

这仍然不能解决问题,因此我在SO上进行了检查,发现this question,这表明我也需要设置基本属性。我这样做了,我的代码现在看起来像这样:

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

但是我仍然没有看到这个属性被设置。当我调用<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 时,基本的<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 属性已设置,但我的内部属性仍未设置。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我刚刚进行了一些测试,并且有效:

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之前使用了TextBox属性值。

答案 1 :(得分:1)

这比您尝试的要简单得多。只需通过Form的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

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