gpt4 book ai didi

c# - 在用户控件中更改默认背景颜色的问题

转载 作者:行者123 更新时间:2023-11-30 12:46:00 25 4
gpt4 key购买 nike

我正在创建一个黑色背景的自定义控件,但设计器存在一些问题。实话实说,我有一个继承自 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# - 在用户控件中更改默认背景颜色的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com