我创建了UserControl类,一切正常。只是想知道Invalidate有什么方法。它实际上并没有使我的类中的控件无效,并且在调用它时我没有发现任何效果。任何人都可以解释这个方法在UserControl类中的作用。
答案 0 :(得分:2)
要制作UserControl
Invalidate
所有嵌套控件,您需要调用Invalidate(invalidateChildren)
的特殊重载:
yourUserControl.Invalidate(true);
使控件的特定区域无效并导致绘制 要发送给控件的消息。 (可选)使孩子无效 分配给控件的控件。
备注:
说明
调用Invalidate方法不会强制执行同步绘制;至 强制同步绘制,调用后调用Update方法 无效方法。当没有参数调用此方法时, 整个客户区域被添加到更新区域。
<强>更新强>
如果你想从UI线程以外的线程调用它,你需要使用Invoke
,可能是这样的:
public delegate void InvalidateUC();
public InvalidateUC myInvalidateDelegate;
public void InvalidateMethod()
{
yourUserControl1.Invalidate(true);
}
现在,做完
myInvalidateDelegate = new InvalidateUC(InvalidateMethod);
你可以从另一个线程
中调用它yourForm.yourUserControl1.Invoke(myInvalidateDelegate);
请注意,如果您不确定该调用是否实际来自非ui线程,您可以(并且应该)添加条件
if (yourForm.yourUserControl1.InvokeRequired)..