c# – 防止Winforms Designer为继承的控件生成属性值
发布时间:2020-12-16 00:23:28 所属栏目:百科 来源:网络整理
导读:我有一个自定义DataGridView,让我们这样说: public MyGridView : DataGridView{ public MyGridView() { BackgroundColor = Color.Red; }} 现在,当我在使用设计器的项目中使用此控件时,出于某种原因,还需要在designer.cs文件中设置该属性. 所以在设计器文件
我有一个自定义DataGridView,让我们这样说:
public MyGridView : DataGridView { public MyGridView() { BackgroundColor = Color.Red; } } 现在,当我在使用设计器的项目中使用此控件时,出于某种原因,还需要在designer.cs文件中设置该属性. 所以在设计器文件中,我会: this.MyGridView1.BackgroundColor = System.Drawing.Color.FromArgb((byte)(int)255,(byte)(int)0,(byte)(int)0); 我的问题是,它阻止我能够改变MyGridView的构造函数中的颜色,而不必遍历我以前控制的所有表单并在每个实例中更改它,使我的自定义控件无效. 有些属性提供虚拟getter,这没有问题,但大多数属性都没有. 如何防止设计人员生成此代码? 解决方法
我应该强调,这通常不是你这样做的方式,[DefaultValue]属性通常是正确的选择.但是您正在使用Color类型的属性,以灵活的方式为其编写属性并不简单.您可以传递给属性构造函数的参数只能是少数几种数据类型,Color不是其中之一.你必须制作一个ColorConverter可以理解的字符串,它既丑陋又难以维护.
PropertyGrid有一种为“困难”属性提供默认值的辅助方法,它还会在类中查找特别命名的私有成员.给定名为“Xxxx”的属性,它会查找以下内容: > DefaultXxxx,一个只有一个返回默认值的getter的属性 这使得此代码有效: public class MyGridView : DataGridView { public MyGridView() { this.BackgroundColor = DefaultBackgroundColor; } public new Color BackgroundColor { get { return base.BackgroundColor; } set { base.BackgroundColor = value; } } private bool ShouldSerializeBackgroundColor() { return !this.BackgroundColor.Equals(DefaultBackgroundColor); } private void ResetBackgroundColor() { this.BackgroundColor = DefaultBackgroundColor; } private static Color DefaultBackgroundColor { get { return Color.Red; } } } 请注意,ResetBackgroundColor()方法实际上并不是必需的,因为当用户重置属性时不需要特殊效果,我只是为了完整性而包含它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |