c# - TreeView AfterExpand 事件有时不起作用 C#

标签 c# winforms treeview

我有一个 TreeView 并订阅了“TreeViewConnections_AfterExpand”和“”事件。 everyone TreeNode 包含 MenuScript 事件。和以下代码:

        //event
private void TreeViewConnections_AfterExpand(object sender, TreeViewEventArgs e)
    {
        var activeKey = e.Node.ImageKey.Replace("Inactive", "Active");
        e.Node.ImageKey = activeKey;
        e.Node.SelectedImageKey = activeKey;
    }

//event
private void TreeViewConnections_MouseClick(object sender, MouseEventArgs e)
    {
        var currentNode = this.treeViewConnections.GetNodeAt(e.Location);
        if (currentNode == null) return;
        var currentBounds = currentNode.Bounds;
        Rectangle bounds = new Rectangle(currentBounds.Left - ExpandIcon.Width, currentBounds.Y, currentBounds.Width - 5, currentBounds.Height);
        if (bounds.Contains(e.Location)) return;
        this.treeViewConnections.SelectedNode = currentNode;

        if (e.Button == MouseButtons.Right)
        {
            SetupConnectionMenus(currentNode);
        }
    }

    private void SetupConnectionMenus(TreeNode node)
    {
        var isOpened = node.Nodes.Count > 0;
        if (node.ContextMenu == null)
        {
            var menu = new ContextMenuStrip();
            menu.Items.AddEx("Open Connection", node.Name + "_Open", !isOpened, onClick: OpenConnection_Click, context: node);
            menu.Items.AddEx("Close Connection", node.Name + "_Close", isOpened, onClick: CloseConnection_Click, context: node);
            node.ContextMenuStrip = menu;
        }
    }

   //event
   private void OpenConnection_Click(object sender, EventArgs e)
    {
        var menuItem = sender as ToolStripMenuItem;
        var currentNode = menuItem.Tag as TreeNode;
        OpenConnection(currentNode);
    }

    //event
    private void CloseConnection_Click(object sender, EventArgs e)
    {
        var menuItem = sender as ToolStripMenuItem;
        var currentNode = menuItem.Tag as TreeNode;
        currentNode.Nodes.Clear();
        currentNode.Collapse();
    }

private void OpenConnection(TreeNode node)
    {
        treeViewConnections.BeginUpdate();
        //add child node to  the node.
        treeViewConnections.EndUpdate();
        node.Expand(); //?????
    }

TreeViewConnections_AfterExpand event sometime don't work. as shown in the figure:

enter image description here

但在这种情况下,我还需要做些什么吗?

最佳答案

此问题是 Node.Collapse 和 Node.Nodes.Clear() 调用引起问题的原因。正确的如下:

private void CloseConnection_Click(object sender, EventArgs e)
    {
        var menuItem = sender as ToolStripMenuItem;
        var currentNode = menuItem.Tag as TreeNode;
        currentNode.Collapse(); // Here will verify whether the current node has child nodes.
        currentNode.Nodes.Clear();
    }

关于c# - TreeView AfterExpand 事件有时不起作用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45503751/

相关文章:

c# - WebAPI HttpContent 转换为类型化对象

c# - 代码困惑 - 为什么一个有效,而另一个无效?

c# - 如何更改 Windows 窗体 LinkLabel 的文本和链接

wpf - TreeViewItem 上的键绑定(bind)

javascript - ASP.NET TreeView 可以向上而不是向下展开吗?

c# - 防止替换逗号分隔字符串中已替换的字符串

c# - 顶部 :? 的 CSS 问题

远程数据库的 C# SMO 备份到本地机器

c# - SuspendLayout/ResumeLayout 是否毫无值(value),或者我的做法是错误的?

c - 如何从日志文件获取数据插入 gtk 列表存储/ TreeView ?