繁体   English   中英

在折叠或展开树视图中的所有树节点时禁用屏幕更新

[英]Disable screen updating while collapsing or expanding all treenodes in a treeview

我创建了一个继承树视图(CustomTreeview)的类,这将是我在整个问题中工作的类。 我想要一些方法来阻止 CustomTreeview 绘制自身和节点,直到所有折叠或展开完成。 我将其称为屏幕更新,因为我熟悉 VBA 中的更新。 我曾尝试覆盖 OnPaint 方法以及 OnNodeDraw 方法。 尽管 node.toggle 方法和 CollapseAll/ExpandAll 方法都不会触发 OnPaint/OnNodeDraw 方法中的任何一个。 下面是我对 OnPaint/OnNodeDraw 方法的尝试(名称和输入显然略有不同以满足覆盖)。

protected override void OnDrawNode(DrawTreeNodeEventArgs e)
{
    if (!collapsing && !expanding)
    {
        base.OnDrawNode(e);
        NotifyNodeDrawn(this, e);
    }
}

NotifyNodeDrawn 触发我在不同类中订阅的事件处理程序,以检查一些逻辑,决定它是处于展开模式还是折叠模式(我通过写入 CollapseAll/ExpandAll 方法设置的布尔值)。

public new void CollapseAll()
{
    collapsing = true;
    base.CollapseAll();
    collapsing = false;
    this.Invalidate();
}
public new void ExpandAll()
{
    expanding = true;
    base.ExpandAll();
    expanding = false;
    this.Invalidate();
}

如果这会按照我想要的方式工作,那么当我调用 ExpandAll() 时,节点不会重绘,直到调用 CustomTreeview.Invalidate()。 虽然,正如我在调用 ExpandAll/CollapseAll 之前所说的,根本没有进入 OnDrawNode/OnPaint 方法。

预先感谢您的帮助!

好的,我几天来一直试图解决这个问题,在我发布问题后,我终于找到了解决方案。 BeginUpdate() 停止重绘控件,直到您调用 EndUpdate()。 简单有效的解决方法! 我会把这个留在这里希望能帮助别人! 如果有人对该谜团有任何解决方案,这仍然不会进入 OnDrawNode/OnPaint 覆盖。

public new void ExpandAll()
{
    BeginUpdate();
    expanding = true;
    base.ExpandAll();
    expanding = false;
    EndUpdate();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM