WinForm继承设计器设置被复制到派生形式

时间:2009-12-04 19:30:00

标签: .net winforms visual-studio-2008 inheritance

我在使用Visual Studio .NET 2008时遇到了一些恼人的行为。

我们已经创建了一个基本表单,以及一个从Infragistics UltraGrid派生的基本网格。

在基本形式中,我们设置了一些属性,如颜色,字体大小等。 1.我们创建一个新的Windows窗体,(即DerivedForm) 2.通过简单地添加using语句并更改类定义中的继承,我们将继承更改为BaseForm。 3.此时,IDE会将您在BaseForm.designer.cs中看到的所有属性设置复制到DerivedForm.designer.cs。 4.现在,如果我们对BaseForm属性进行更改,它将被在步骤3中复制的现有设置覆盖。因此,我们在子窗体中看不到新的更改。

正在复制的内容的一个示例来自BaseForm.InitializeControls(),如下所示,我在派生的Form类的InitializeControls()中找到:

//
// BaseForm_Fill_Panel
//
this.BaseForm_Fill_Panel.Location = new System.Drawing.Point(0, 47);
this.BaseForm_Fill_Panel.Size = new System.Drawing.Size(1095, 505);

有没有办法阻止IDE将属性复制到子表单?

2 个答案:

答案 0 :(得分:0)

我刚在2005年试过它,它做同样的事情,所以我认为它是“按预期工作”

编辑:
直到我建立....你有建造吗?

edit2:
这是我看到的行为。如果这是您想要的,请告诉我,如果不是,您希望它与众不同
1。创建基本表单,编辑一些属性,说背景=蓝色
2。创建派生表单,后台属性将为蓝色
3。改变基本形式,说背景=红色
4。查看派生表单属性。从3没有反映变化(即背景仍然是蓝色)。
5。建立
6。派生形式现在反映3的变化(即背景现在是红色)

答案 1 :(得分:0)

只是我的2cents ...当我构建我的基类以具有颜色,字体,大小等的统一一致性时,在我的基类定义中,我对属性进行了覆盖以使它们成为只读。因此,当创建原始表单并包含所有额外的垃圾/膨胀时,当您第一次编译它时,它将以只读方式将值唠叨并要求您删除所述行。然后,对任何类(包括只读字体),所有表单,文本框,标签,按钮等的任何后续更改都将反映它们。这种覆盖只能是只读...

[ReadOnly(true)]
public override Color ForeColor
{ get { return Color.Blue; } }


[ReadOnly(true)]
public override Font Font
{ get { return new Font(GDITFontBaseName, GDITFontBaseSize, FontStyle.Regular, GraphicsUnit.Point); } }

我不知道这是否是你真正想要完成的东西,但在我的东西中,效果很好。