public partial class MyControl1 : UserControl { public MyControl1() { InitializeComponent(); BackColor = Color.Black; } [DefaultValue(typeof(Color),"Black")] public override Color BackColor { get { return base.BackColor; } set { base.BackColor = value; } } }
…
public partial class MyControl2 : MyControl1 { public MyControl2() { InitializeComponent(); } }
问题是我每次打开MyControl2的设计器时,属性对话框中的BackColor都会恢复为System.Drawing.SystemColors.Control,我的控件被涂成灰色.如果我在BackColor上调用Reset,它会正确返回到Color.Black.此外,设计器不会将更改序列化到System.Drawing.SystemColors.Control,直到我对控件进行另一次更改.
那么,我尝试了什么?
>我认为它可能与BackColor是一个环境属性有关,所以我尝试添加属性AmbientValue(false).当然它没有用.
>我尝试删除重写的属性,只在构造函数中留下BackColor = Color.Black.令人惊讶的是,它修复了设计器的问题,但现在重置属性将其恢复为默认值System.Drawing.SystemColors.Control.重写ResetBackColor()并没有解决最后一个问题.
顺便说一句,我在Visual Studio 2010下工作,我的项目是作为.NET 2.0 Windows窗体应用程序创建的.
我很高兴有人能帮助我找到我的代码中的任何错误.这不会阻止我完成项目,但它非常烦人.非常感谢你提前!
解决方法
以下是来自另一篇文章的示例,我知道您不是继承DataGridView的子类,但原则应该是相同的.
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; } } }
很自然 – 这不是我的代码 – 它是来自Hans Passant的一些更纯粹的天才…链接到原始的完整解释:https://stackoverflow.com/a/20838280/685341
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。