2013-12-02 2 views
1

У меня есть два элемента управления TreeView на форме. Что мне нужно сделать, это указать пользователю, когда им разрешено перетаскивать определенные элементы из TreeView A в TreeView B, отображая разные курсоры.Индикаторы TreeView Drag или NoDrag

Как это сделать?

ответ

0

Вы можете попробовать обработать событие MouseMove, выполнить определенное тестирование, чтобы узнать, какой узел перемещен, а затем изменить курсор. Следующий код должен делать то, что вы хотите, я полагаю, что узлы, которые можно перетаскивать, будут иметь курсор Hand, в противном случае отображается стрелка Arrow.

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 

Вы должны добавить свои узлы, которые должны быть указаны в качестве перетаскиваемым к HashSet sepcialNodes, это до вас. Использование hashset поможет повысить производительность, если у вас много узлов.

В случае, если вы не знаете, как зарегистрировать обработчик выше событие MouseMove, попробуйте добавить этот код в форме конструктора (после InitializeComponent):

treeView1.MouseMove += treeView1_MouseMove; 
Смежные вопросы