继承的控件未正确刷新

时间:2016-01-31 04:12:40

标签: vb.net winforms

我有2个具有相似功能的按钮,因此我创建了一个基本按钮类和派生按钮类。

我遇到的问题是,如果我在表单上放置子按钮,对基本按钮进行一些更改并重建它,则表单上的子按钮不会反映更改。重建后,新的子按钮放在窗体上,它具有更改的属性。基本上,在重建基本控件之后,已经放在窗体上的控件不会刷新。

我无法刷新设计师的控件,因为它们太多了。我猜测如果控件放在表单上,​​则设置它的属性(?)。也许我对继承不够好,在这里遗漏了一些东西。

我想知道如何刷新在修改基本控件之前放在表单上的子控件。

使用最小,完整和可验证的示例

更新

以下是VB.NET中的示例。

Public Class ButtonA
    Public Sub New()
        Me.Size = New Size(200, 200)
    End Sub
End Class

Public Class ButtonB
    Inherits ButtonA
End Class

在一个名为btnB的ButtonB实例放在表单上后,ButtonA的默认大小变为

Me.Size = New Size(300, 300)

重建项目后,当我回顾设计师视图时,btnB的大小仍然是(200,200),而不是(300,300),因为它的基本默认大小。

大小仅用作示例,它适用于任何属性。

1 个答案:

答案 0 :(得分:1)

问题在于,一旦在窗体上放置了控件,就会改变设计者在设计时不得使用的属性值。设计师允许您以某种形式对某个类进行控制,首次插入时将获取该控件的大小应该是什么。然后它将在该表单中将该大小分配给该控件。您可以随时通过更改该表单中任何表单的大小或位置来修改表单。设计师将跟踪所有这些。

如果您现在修改源代码以使其具有不同的默认值'然后,大小的值将反映在更改大小之前创建的表单上 - 这是因为控件已经存在于您的表单上,因此设计者没有更长时间必须对尺寸做出任何改变。

如果您想要覆盖此行为,则必须删除设计器代码中的Size属性的赋值(Form.Desisgner.cs - 在C#中或其VB等效项)。但要注意 - 下次启动设计师时,它可能会将尺寸放回原处。