TreeView拖动或NoDrag指示器

时间:2013-12-02 15:50:12

标签: c# winforms treeview indicator

我在表单上有两个TreeView控件。 我需要做的是向用户指示何时允许他们通过显示不同的游标将特定项目从TreeView A拖动到TreeView B.

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以尝试处理MouseMove事件,执行一些命中测试以了解移动了哪个节点,然后更改光标。下面的代码应该做你想要的,我想可以拖动的节点将有一个 Hand 光标,否则会显示箭头光标。

HashSet<TreeNode> specialNodes = new HashSet<TreeNode>();
//MouseMove event handler for your treeView1
private void treeView1_MouseMove(object sender, MouseEventArgs e) {
   var ht = treeView1.HitTest(e.Location);
   if (specialNodes.Contains(ht.Node) && 
       ht.Location == TreeViewHitTestLocations.Label) {
       treeView1.Cursor = Cursors.Hand;
   }
   else treeView1.Cursor = Cursors.Arrow;
}
//Usage
//add some node first
specialNodes.Add(treeView1.Nodes[0]);
//Then try moving your mouse over the node 0

您必须将需要指示为 draggable 的节点添加到hashset sepcialNodes,这取决于您。如果您拥有大量节点,使用 hashset 将有助于提高性能。

如果您不知道如何使用事件MouseMove注册上述处理程序,请尝试将此代码添加到您的Form构造函数中(InitializeComponent之后):

treeView1.MouseMove += treeView1_MouseMove;