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的属性
> resetXxxx(),一种可在用户选择“重置”上下文菜单项时运行的方法
> ShouldSerializeXxxx(),如果不应保留属性的值,则应返回false的方法.
这使得此代码有效:
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()方法实际上并不是必需的,因为当用户重置属性时不需要特殊效果,我只是为了完整性而包含它.
总结以上是内存溢出为你收集整理的c# – 防止Winforms Designer为继承的控件生成属性值全部内容,希望文章能够帮你解决c# – 防止Winforms Designer为继承的控件生成属性值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)