首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向窗体控件类添加自定义属性的模式,而不是到处都有相同的代码?

向窗体控件类添加自定义属性的模式,而不是到处都有相同的代码?
EN

Software Engineering用户
提问于 2015-04-29 05:12:43
回答 1查看 74关注 0票数 1

我正在创建自定义winforms设计器。我在设计器上使用标签、文本框、组合框、列表框、按钮和复选框。我不想在PropertyGrid上显示它们的所有属性,所以我创建了一个自定义属性,并将网格设置为只显示标记为该属性的属性。

代码语言:javascript
复制
propertyGrid1.BrowsableAttributes = new AttributeCollection(
    new MyAttribute()
);

问题是,现在我必须为每个控件创建完全相同的代码。对于我需要的每个控件,我都有自己的包装类,从现有控件派生而来。

代码语言:javascript
复制
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控件,但我不喜欢在许多地方编写完全相同的代码的想法。

我是否应该找到我需要的属性,并在运行时将我的自定义属性(和类别)添加到这些属性中?这会是“一点点”的讨厌,但能起作用吗?

使用接口:我仍然需要实现它,从而产生相同数量的代码。我不能使用泛型:我使用原始控件作为基础,因为设计人员代码可以很好地处理这些控件,并且使用泛型会造成混乱和大量的定制。

EN

回答 1

Software Engineering用户

发布于 2015-04-30 22:53:48

在组件上实现的ICustomTypeDescriptor接口将允许您只显示那些您想要的属性,或者向其他对象注入属性。但是,它只适用于属性网格。它无助于API或代码序列化。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/280446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档