c# – 防止Winforms Designer为继承的控件生成属性值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 防止Winforms Designer为继承的控件生成属性值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1762字,纯文字阅读大概需要3分钟。
内容图文
![c# – 防止Winforms Designer为继承的控件生成属性值](/upload/InfoBanner/zyjiaocheng/762/0fc33e6894fb4368979cc651327d01ac.jpg)
我有一个自定义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的属性
> 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为继承的控件生成属性值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。