如何创建一个更新设计器的.NET winforms自定义控件?

Jas*_*n Z 1 .net user-controls winforms

我创建了一个这样的自定义用户控件(简单示例):

public class MyButton : Button
{
    public MyButton()
    {
        BackColor = Color.Blue;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译后,它将显示在表单设计器工具箱中,并显示更新的属性.但是,如果我更改颜色,我已在表单上使用的控件保持其原始颜色.

有没有办法设计一个控件来传播它对设计师的改变?

Han*_*ant 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)