我已经创建了一个这样的自定义用户控件(简单示例):
public class MyButton : Button
{
public MyButton()
{
BackColor = Color.Blue;
}
}
编译后,它会显示在表单设计器工具箱中,并显示更新的属性。但是,如果我更改颜色,我在表单上使用的控件将保持其原始颜色。
有没有办法设计一个能够将其变化传播给设计师的控件?
答案 0 :(得分:5)
问题是您在编辑类之前在表单上删除的按钮已经被表单的InitializeComponent()调用用不同的颜色初始化。换句话说,它们会覆盖您在构造函数中设置的默认颜色。您需要做的是声明属性的默认值,以便设计者不生成赋值。这应该是这样的:
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
class MyButton : Button {
public MyButton() {
BackColor = Color.Blue;
}
[DefaultValue(typeof(Color), "Blue")]
public override Color BackColor {
get { return base.BackColor; }
set { base.BackColor = value; }
}
}
答案 1 :(得分:1)
我不知道这是否可行,但我知道当您在设计器上拖动控件时,会执行其构造函数。这就是为什么你的按钮最初是蓝色的,之后也不会改变颜色。
答案 2 :(得分:0)
您正在BackColor属性的构造函数中设置默认值,当您启动设计器时,它实际上是从构造函数设置默认值。