【发布时间】:2019-02-25 00:45:11
【问题描述】:
我有一个名为MyForm 的表单,它继承自Windows.Forms.Form。在这个表格上,我有一个名为_msgBox 的TextBox。现在,当我在MyForm 上设置Text 属性时,我实际上想设置_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
但是,这不起作用。所以,我用我的 Google-fu 并且能够找到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
这仍然没有解决问题,所以我在SO上查看并找到this question,这表明我也需要设置基本属性。我这样做了,我的代码现在看起来像这样:
<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 时,基本Text 属性已设置,但我的内部属性仍未设置。我该如何解决这个问题?
【问题讨论】:
-
如果要覆盖,为什么要使用
Overloads关键字而不是Overrides关键字? -
@jmcilhinney 自动完成?
-
@VisualVincent 我也投票关闭它。我没有注意到,因为我不习惯 VB.NET 有一个
overloads关键字 -
实际上,问题远不止于此,因为即使您覆盖而不是重载,代码仍然会抛出
NullReferenceException,正如我在回答中提到的那样。 -
@jmcilhinney 这是真的,如果这已经足够了,那么你可以离开它。我会自己解决这个问题,除非这段代码实际上没有被命中;)
标签: .net vb.net winforms inheritance