Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 属性更改时在设计时重新绘制控件_.net - Fatal编程技术网

.net 属性更改时在设计时重新绘制控件

.net 属性更改时在设计时重新绘制控件,.net,.net,我有一个.NET(特别是C#)控件,它是RadioButton的一个子类,并且有一个额外的属性来向它添加第二个文本字符串。事实上,属性到底做什么并不重要——重要的是它应该改变控件的外观 在“设计”视图中更改此属性并按enter键时,窗体设计器上的控件不会更改。如果我更改RadioButton上已经存在的属性,控件将使用新文本重新绘制自身。我认为这可能是通过IDesigner类型或属性实现的,但我不知道是什么 如何在更改添加的属性时重新绘制控件?试试看 someGUIControl.Invalid

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

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

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

试试看

someGUIControl.Invalidate();
要使控件重新绘制,请尝试

someGUIControl.Invalidate();

让你的控件重新绘制。

可能大多数人不会阅读这些评论,所以我将把它作为一个答案发布

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

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

        // Force redraw to show new color in designer instantly
        if (DesignMode)
            Invalidate();
    }
}
请求重新绘制

返回是否在设计器模式下执行此代码。因此,if语句后面的代码将永远不会为用户运行


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

可能大多数人不会阅读注释,因此我将其作为答案发布

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

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

        // Force redraw to show new color in designer instantly
        if (DesignMode)
            Invalidate();
    }
}
请求重新绘制

返回是否在设计器模式下执行此代码。因此,if语句后面的代码将永远不会为用户运行


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

这有帮助吗?或者这样:@Gareth在setter的末尾调用Invalidate()(根据第二个链接)。这看起来只是一个不必要的(尽管很小)开销,因为它在运行时也会这样做。对仅设计时选项有什么想法吗?使用Component.DesignMode确定是否执行代码@加雷斯:是的,那也行。刚刚下载并查看了.NET源代码,他们在其中也使用了Invalidate(),所以我会坚持下去。这有什么帮助吗?或者这样:@Gareth在setter的末尾调用Invalidate()(根据第二个链接)。这看起来只是一个不必要的(尽管很小)开销,因为它在运行时也会这样做。对仅设计时选项有什么想法吗?使用Component.DesignMode确定是否执行代码@加雷斯:是的,那也行。刚刚下载并查看了.NET源代码,其中也使用了Invalidate(),所以我将继续使用它。