我有一个 .NET(特别是 C#)控件,它是 RadioButton 的子类,并且有一个额外的属性可以向其中添加第二个文本字符串。事实上,该属性究竟做了什么并不重要——重要的是它应该改变控件的外观。
在设计视图中更改此属性并按 Enter 时,表单设计器上的控件不会更改。如果我更改 RadioButton 上已存在的属性,则控件将使用新文本重新绘制自身。我认为这可能是通过 IDesigner 类型或属性实现的,但我不知道是什么。
如何在更改添加的属性时重新绘制控件?
我有一个 .NET(特别是 C#)控件,它是 RadioButton 的子类,并且有一个额外的属性可以向其中添加第二个文本字符串。事实上,该属性究竟做了什么并不重要——重要的是它应该改变控件的外观。
在设计视图中更改此属性并按 Enter 时,表单设计器上的控件不会更改。如果我更改 RadioButton 上已存在的属性,则控件将使用新文本重新绘制自身。我认为这可能是通过 IDesigner 类型或属性实现的,但我不知道是什么。
如何在更改添加的属性时重新绘制控件?
可能大多数人不会阅读评论,所以我将其发布为答案。
让我用一个非常简单的例子来解释它:
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
是可选的,但它可以保持代码干净,并且不会导致运行时的冗余方法调用。
尝试
someGUIControl.Invalidate();
使您的控件重绘。