0
最近我從here下載了Multi_select TreeView。它添加了一個選項來選擇多個TreeNode。隨機消失Multi_select TreeView
我在每個頁面(動態創建)上使用3個TabControl和1個Multi_select TreeView。有一個選項可以從第一個拖動到另一個。我還可以在每個TabControl上添加額外的TabPage(帶有TreeViwe)。
問題是TreeView(拖動源)隨機消失,由不同的動作引起。 有時候,它是由從一個TabControl快速拖放到另一個TabControl造成的。有時它會在創建新的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();
}
我已經添加了TreeNodes顏色的一些變化,因爲在之前拖放之後選擇不同的節點時出現問題。
在此先感謝! 對不起,我英文很差。