我正在创建自定义winforms设计器。我在设计器上使用标签、文本框、组合框、列表框、按钮和复选框。我不想在PropertyGrid上显示它们的所有属性,所以我创建了一个自定义属性,并将网格设置为只显示标记为该属性的属性。
propertyGrid1.BrowsableAttributes = new AttributeCollection(
new MyAttribute()
);问题是,现在我必须为每个控件创建完全相同的代码。对于我需要的每个控件,我都有自己的包装类,从现有控件派生而来。
class MyButton : Button
{
[MyAttribute]
[Category("Common properties")]
public new string Name { get { return base.Name; } set { base.Name = value; } }
}
class MyLabel : Label
{
[MyAttribute]
[Category("Common properties")]
public new string Name { get { return base.Name; } set { base.Name = value; } }
}
...我现在有来自每个控件的7个属性,我总是需要显示。
The question:
是否有一种模式可以用于只有一个类具有这些属性并以某种方式“注入”这些属性,而不是为所有控件复制粘贴相同的代码?我只有6-8控件,但我不喜欢在许多地方编写完全相同的代码的想法。
我是否应该找到我需要的属性,并在运行时将我的自定义属性(和类别)添加到这些属性中?这会是“一点点”的讨厌,但能起作用吗?
使用接口:我仍然需要实现它,从而产生相同数量的代码。我不能使用泛型:我使用原始控件作为基础,因为设计人员代码可以很好地处理这些控件,并且使用泛型会造成混乱和大量的定制。
发布于 2015-04-30 22:53:48
在组件上实现的ICustomTypeDescriptor接口将允许您只显示那些您想要的属性,或者向其他对象注入属性。但是,它只适用于属性网格。它无助于API或代码序列化。
https://softwareengineering.stackexchange.com/questions/280446
复制相似问题