2010-01-29 63 views
1

我创建像这样(简单的例子)的自定义用户控件:如何创建更新设计器的.NET winforms自定义控件?

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

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

有没有一种方法来设计一个控制器,将它的变化传播给设计师?

+0

当你说你改变颜色,你的意思是你改变的代码行“BackColour = Color.Blue”还是你通过改变控制的1个实例的属性VS属性页面? – 2010-01-29 15:06:55

+0

我改变了代码行 – 2010-01-29 15:12:14

+0

当发生如果你然后运行整个应用程序(F5)所有的控件更新/更改呢? – 2010-01-29 15:16:49

回答

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; } 
    } 
} 
+0

从技术上讲,这适用于窗体上的单个控件。当我将第二个控件放到窗体上,然后更改颜色时,原始颜色仍然存在。有任何想法吗? – 2010-01-29 18:04:54

+0

查看Designer.cs文件并确保未分配BackColor属性。如果在更改代码之前添加了这些按钮,只需删除这些分配即可。 – 2010-01-29 18:20:17

1

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

0

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