代码之家  ›  专栏  ›  技术社区  ›  Jason Z

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

  •  1
  • Jason Z  · 技术社区  · 15 年前

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

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

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

    有没有一种方法可以设计一个控件来将其更改应用于设计器?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Hans Passant    15 年前

    问题是,在编辑类之前在窗体上丢弃的按钮已经由窗体的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; }
        }
    }
    
        2
  •  1
  •   Gerrie Schenck    15 年前

    我不知道这是否可行,但我知道当您在设计器上拖动控件时,它的构造函数会被执行。这就是为什么你的按钮一开始是蓝色的,之后不会改变颜色。

        3
  •  0
  •   Ravisha    15 年前

    您正在backcolor属性的构造函数中设置默认值,当您启动设计器时,它实际上从构造函数中设置了默认值。