Winform中的TreeView控件,要实现节点的多选和拖动
雪满西京 2011-09-05 10:23:12 如题,我的TreeView节点是绑定的Access数据库,刚开始的时候我是在BeforeSelect和AfterSelect事件里面写方法来实现节点的多选,结果发现选中多个节点后不能取消之前选中的最后一个节点。于是我就在BeforeSelect里面加了一个判断:
private void treeview1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (e.Action == TreeViewAction.Unknown)
{
e.Cancel = true;
}
//按下了CTRL键,取消已选中的节点
if (isControlPressed && selectedNodes.Contains(e.Node))
{
DeselectAllNodes();
selectedNodes.Remove(e.Node);
SelectNodes();
e.Cancel = true;
return;
}
///如果没有按住Shift键,将此节点标记为初始节点
if (!isControlPressed && !isShiftPressed) firstNode = e.Node;
}
然后问题就来了,我在做拖动节点的时候,想让鼠标拖动到哪个节点的时候,这个节点就变为SelectedNode,高亮显示。
可是我在treeView1_DragOver事件里面写了 this.treeView1.SelectedNode = tn; 经过调试后发现,根本就不能给SelectedNode 赋值,调试过后tn是有值的,但是SelectedNode仍然是null,我想知道这是为什么啊?是不是我在选中节点前写的 if (e.Action == TreeViewAction.Unknown) {e.Cancel = true;}
造成的?