我创建像这样(简单的例子)的自定义用户控件:如何创建更新设计器的.NET winforms自定义控件?
public class MyButton : Button
{
public MyButton()
{
BackColor = Color.Blue;
}
}
编译后,它出现在表单设计工具箱,并显示与更新的属性。但是,如果我改变颜色,我已经在窗体上使用的控件保持其原始颜色。
有没有一种方法来设计一个控制器,将它的变化传播给设计师?
我创建像这样(简单的例子)的自定义用户控件:如何创建更新设计器的.NET winforms自定义控件?
public class MyButton : Button
{
public MyButton()
{
BackColor = Color.Blue;
}
}
编译后,它出现在表单设计工具箱,并显示与更新的属性。但是,如果我改变颜色,我已经在窗体上使用的控件保持其原始颜色。
有没有一种方法来设计一个控制器,将它的变化传播给设计师?
问题是,在编辑类之前,您在表单上放下的按钮已被表单的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; }
}
}
从技术上讲,这适用于窗体上的单个控件。当我将第二个控件放到窗体上,然后更改颜色时,原始颜色仍然存在。有任何想法吗? – 2010-01-29 18:04:54
查看Designer.cs文件并确保未分配BackColor属性。如果在更改代码之前添加了这些按钮,只需删除这些分配即可。 – 2010-01-29 18:20:17
我不知道这是否可能,但我知道当你在设计器上拖动一个控件时,它的构造函数会被执行。这就是为什么你的按钮一开始就是蓝色的,并且之后不会改变颜色。
您正在为BackColor属性的构造函数中设置默认值,当您启动设计器时,它实际上会从构造函数中设置默认值。
当你说你改变颜色,你的意思是你改变的代码行“BackColour = Color.Blue”还是你通过改变控制的1个实例的属性VS属性页面? – 2010-01-29 15:06:55
我改变了代码行 – 2010-01-29 15:12:14
当发生如果你然后运行整个应用程序(F5)所有的控件更新/更改呢? – 2010-01-29 15:16:49