2

我有一个 .NET(特别是 C#)控件,它是 RadioButton 的子类,并且有一个额外的属性可以向其中添加第二个文本字符串。事实上,该属性究竟做了什么并不重要——重要的是它应该改变控件的外观。

在设计视图中更改此属性并按 Enter 时,表单设计器上的控件不会更改。如果我更改 RadioButton 上已存在的属性,则控件将使用新文本重新绘制自身。我认为这可能是通过 IDesigner 类型或属性实现的,但我不知道是什么。

如何在更改添加的属性时重新绘制控件?

4

2 回答 2

3

可能大多数人不会阅读评论,所以我将其发布为答案。

让我用一个非常简单的例子来解释它:

public override Color ForeColor
{
    get { ... }
    set
    {
        if (_foreColor == value) return;
        _foreColor = value;

        // Force redraw to show new color in designer instantly
        if (DesignMode)
            Invalidate();
    }
}

无效请求重绘。

DesignMode返回此代码是否在设计器模式下执行。所以 if 语句之后的代码永远不会为用户运行。

检查DesignMode可选的,但它可以保持代码干净,并且不会导致运行时的冗余方法调用。

于 2015-06-09T07:26:11.450 回答
1

尝试

someGUIControl.Invalidate();

使您的控件重绘。

于 2014-01-17T09:29:34.993 回答