【问题标题】:How do you create a .NET winforms custom control that updates the designer?如何创建更新设计器的 .NET winforms 自定义控件?
【发布时间】:2010-01-29 14:57:50
【问题描述】:

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

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

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

有没有办法设计一个控件,将其更改传播给设计者?

【问题讨论】:

  • 当您说更改颜色时,您的意思是更改代码行“BackColour = Color.Blue”还是通过 VS 属性页面更改控件的 1 个实例的属性?
  • 如果您随后运行整个应用程序 (F5) 会发生什么情况,那么所有控件都会更新/更改吗?
  • 否定。基本上,控件保持在创建/拖动到表单时的状态。

标签: .net winforms user-controls


【解决方案1】:

问题是您在编辑类之前放置在表单上的按钮已经被表单的 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; }
    }
}

【讨论】:

  • 从技术上讲,这适用于表单上的单个控件。当我将第二个控件放到表单上然后更改颜色时,原始颜色仍然存在。有什么想法吗?
  • 查看 Designer.cs 文件并确保未分配 BackColor 属性。如果在更改代码之前添加了这些按钮,只需删除分配即可。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2023-03-29
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多