随机消失多选树视图(_S)

本文关键字:视图 消失 随机 | 更新日期: 2023-09-27 18:24:41

最近我从这里下载了Multi_select TreeView。它添加了一个选项来选择多个树节点。

我在每个页面上使用3个TabControls和1个Multi_select TreeView(动态创建)。有一个选项可以从第一个拖动到另一个。我还可以在每个TabControls上添加额外的TabPage(上面有TreeViwe)。

问题是TreeView(拖动源)由于不同的操作而随机消失。有时它是由从一个TabControl到另一个Tab控件的快速拖放引起的。有时它会在创建新的TabPage后消失。它每20-30次发生一次。调试拖放操作真的很困难,尤其是当它不是每次都发生的时候。

以下是我的事件处理程序,用于提供拖放功能。

private void Tv_ItemDragSource(object sender, ItemDragEventArgs e)
    {
        if (((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes.Count == 0 || (((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes.Count == 1 && ((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes[0] != ((TreeNode)e.Item)))
        {
            ((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes.Clear();
            ((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes.Add((TreeNode)e.Item);
        }
        foreach (TreeNode i in ((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes)
        {
            if (i.Level != 0)  
                return;
        }
        DoDragDrop(((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes, DragDropEffects.Copy);
        ((MultiSelectTreeView.MultiSelectTreeView)sender).EndUpdate();
    }
private void Tv_DragEnterSource(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Copy;
    }
private void Tv_DragDropSource(object sender, DragEventArgs e)
    {
        TreeNode rewritten = new TreeNode();
        ArrayList selectNodes = e.Data.GetData(e.Data.GetFormats()[0]) as ArrayList;
        foreach (TreeNode i in selectNodes)
        {
            rewritten.Text = i.Text;
            ((TreeView)sender).Nodes.Add(rewritten);
            foreach (TreeNode j in i.Nodes)
            {
                rewritten.Nodes.Add(j.Text);
            }
            rewritten = new TreeNode();
        }
        foreach (TreeNode i in ((MultiSelectTreeView.MultiSelectTreeView)sender).Nodes)
        {
            i.BackColor = Color.White;
            i.ForeColor = SystemColors.WindowText;
        }
        selectNodes.Clear();
    }
void tv_LostFocus(object sender, EventArgs e)
    {
        foreach (TreeNode i in ((MultiSelectTreeView.MultiSelectTreeView)sender).Nodes)
        {
            i.BackColor = Color.White;
            i.ForeColor = SystemColors.WindowText;
        }
        ((MultiSelectTreeView.MultiSelectTreeView)sender).SelectedNodes.Clear();
    }
void tv_MouseUp(object sender, MouseEventArgs e)
    {
        ((MultiSelectTreeView.MultiSelectTreeView)sender).EndUpdate();
    }

void tv_MouseDown(object sender, MouseEventArgs e)
    {
        ((MultiSelectTreeView.MultiSelectTreeView)sender).BeginUpdate();
    }

我添加了一些TreeNode颜色的更改,因为在之前的拖放之后选择不同的节点时出现了问题。

提前感谢!抱歉我英语不好。

随机消失多选树视图(_S)

我设法解决了这个问题。我怀疑问题出在BeginUpdate中,没有触发EndUpdate。我添加了:

((MultiSelectTreeView.MultiSelectTreeView)sender).EndUpdate();

在MouseLeave上。现在效果很好。

祝你今天愉快。:)