代码之家  ›  专栏  ›  技术社区  ›  0___________

UserControl Invalidate()方法。如何正确地使UserControl中的子控件无效

  •  0
  • 0___________  · 技术社区  · 7 年前

    我已经创建了UserControl类,一切正常。只是想知道Invalidate是做什么的。实际上,它不会使我的类中的控件无效,并且在调用它时,我没有发现任何效果。谁能解释一下这个方法在UserControl类中的作用吗。

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  3
  •   TaW    6 年前

    做一个 UserControl Invalidate 嵌套的 需要调用特殊重载的控件 Invalidate(invalidateChildren)

    yourUserControl.Invalidate(true);
    

    使控件的特定区域无效并导致绘制 要发送到控件的消息。(可选)使子项无效 分配给控件的控件。

    评论

    强制同步绘制,在调用 使方法无效。如果在没有参数的情况下调用此方法,则

    使现代化

    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)..