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

时间:2010-01-29 14:57:50

标签: .net winforms user-controls

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

public class MyButton : Button
{
    public MyButton()
    {
        BackColor = Color.Blue;
    }
}

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

有没有办法设计一个能够将其变化传播给设计师的控件?

3 个答案:

答案 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属性的构造函数中设置默认值,当您启动设计器时,它实际上是从构造函数设置默认值。