小编Viq*_*ish的帖子

如何防止事件导致自己的事件在C#中触发?

我有一个带有复选框的树视图,我有"AfterCheck"事件的以下处理程序:

private void trvAvailableFiles_AfterCheck(object sender, TreeViewEventArgs e)
{
    if (!_isCheckingInProgress)
    {
        trvAvailableFiles.BeginUpdate();

        var nodePath = e.Node.Tag.ToString();
        bool isChecked = e.Node.Checked;
        e.Node.Nodes.Clear();

        try
        {
            _fileTreeLogic.GetChildNodes(e.Node, true);
            e.Node.ExpandAll();

            _isCheckingInProgress = true;
            SetChildrenCheckState(e.Node, isChecked);
            _isCheckingInProgress = false;

        }
        finally
        {
            trvAvailableFiles.EndUpdate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果仔细观察,你会发现我正在检查"_isCheckingInProgress".如果不是,那么我继续并展开所有节点并调用SetChildrenCheckState()方法.我遇到的问题是SetChildrenCheckState()随后将导致每个子节点都为其自己的节点触发AfterCheck事件.

我的问题是,是否有更简洁的方法允许第一个AfterCheck事件发生而不是后续事件?我必须有一个实例bool变量来检查和设置似乎有点hackish.

.net c# treeview events winforms

5
推荐指数
2
解决办法
3010
查看次数

标签 统计

.net ×1

c# ×1

events ×1

treeview ×1

winforms ×1