c# – 在usercontrol中更改默认backcolor的问题

c# – 在usercontrol中更改默认backcolor的问题,第1张

概述我正在创建一个黑色背景的自定义控件,但设计师遇到了一些问题.真相被告知我有一个继承自UserControl的基类控件类,然后是一些代表我将在GUI中使用的最终控件的子类.在该基类中,我重写BackColor属性,添加DefaultValue属性并在构造函数中将默认值设置为BackColor.举个例子,我的代码看起来像这样: public partial class MyControl1 : Use 我正在创建一个黑色背景的自定义控件,但设计师遇到了一些问题.真相被告知我有一个继承自UserControl的基类控件类,然后是一些代表我将在GUI中使用的最终控件的子类.在该基类中,我重写Backcolor属性,添加DefaultValue属性并在构造函数中将默认值设置为Backcolor.举个例子,我的代码看起来像这样:

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窗体应用程序创建的.

我很高兴有人能帮助我找到我的代码中的任何错误.这不会阻止我完成项目,但它非常烦人.非常感谢你提前!

解决方法 这可能会有所帮助 – winforms设计器中似乎有一些伏都教(有点像XML序列化程序),它会查找以特定方式命名的属性,因为DefaultValue不能像您预期的那样工作:

以下是来自另一篇文章的示例,我知道您不是继承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

总结

以上是内存溢出为你收集整理的c# – 在usercontrol中更改默认backcolor的问题全部内容,希望文章能够帮你解决c# – 在usercontrol中更改默认backcolor的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1230494.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存