一个人可以在从另一个表单派生的表单类中控制吗?

时间:2013-05-22 08:12:42

标签: vb.net inheritance

我创建了一个从另一种形式派生的表格: -

Public Class MyForm
    ' ...etc
End Class

Public Class MyDerivedForm
    Inherits MyBaseForm
    ' ...etc
End Class

Public Class MyOtherDerivedForm
    Inherits MyBaseForm
    ' ...etc
End Class

这很好用,我可以使用表单设计器向派生表单添加控件。但我想在MyDerivedForm上稍微移动一些继承的控件而不会打扰MyBaseFormMyOtherDerivedForm。我无法在表单设计器上看到任何方法。

是否可以这样做(最好是设计师,但必要时带代码)?

2 个答案:

答案 0 :(得分:1)

在我的VB.NET WinForms应用程序中,我继承了表单,我可以在设计器中抓取继承的控件,并像在表单上使用非继承控件一样移动它们。

但是我注意到过去有两件事阻止了这件事。如果更改基本表单上控件的位置,或更改某些定位属性(例如锚点或停靠),则可以(但不总是)移动继承的控件。此外,我无法在早期版本的.NET中移动我的一些继承控件(我相信2.0),但我从来没有弄清楚原因,所以我不得不求助于通过属性网格更改位置。

答案 1 :(得分:1)

这不是典型的VB.NET问题,所以不确定这里发生了什么。当基类中控件的Modifiers属性为Private时,您将在继承的控件上获得锁定图标,并为继承的控件获取灰显的“属性”窗口。 Winforms设计器观察基类成员的可访问性。私人成员不能搞砸。 Modifiers的默认值是VB.NET中的Friend,C#中的Private。

让它成为好友,允许派生的表单类修改控件属性。如果基本表单类存在于另一个程序集中,那么Friend不够好,您将需要Public。

Anchor属性可以成为一个问题,但只有在您锚定到右侧或底部时才会出现问题。如果控件以这种方式锚定,则当派生形式与基本形式具有不同的大小时,该控件具有在错误位置结束的诀窍。只需避免锚定在基类的右/底部并更改派生类中的锚点。