TreeView ड्रैग या NoDrag संकेतक

मेरे पास एक फॉर्म पर दो TreeView नियंत्रण हैं। मुझे जो करना है वह उपयोगकर्ता को इंगित करता है जब उन्हें अलग-अलग कर्सर प्रदर्शित करके TreeView A से TreeView B तक विशिष्ट आइटम खींचने की अनुमति होती है।

मैं यह कैसे हासिल कर सकता हूं ?

1

1 उत्तर

आप MouseMove ईवेंट को संभालने का प्रयास कर सकते हैं, यह जानने के लिए कि कौन सा नोड स्थानांतरित हो गया है, कुछ कर्सर परीक्षण करें, फिर कर्सर बदलें। निम्न कोड जो आप चाहते हैं वह करना चाहिए, मुझे लगता है कि खींचे जा सकने वाले नोड्स में हैंड कर्सर होगा, अन्यथा तीर कर्सर दिखाया जाएगा।

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

आपको अपने नोड्स को जोड़ना होगा जिन्हें हैशसेट sepcialNodes पर draggable के रूप में इंगित करने की आवश्यकता है, यह आपके ऊपर है। हैशसेट का उपयोग करने से आपके पास बहुत सारे नोड्स होने पर प्रदर्शन में सुधार करने में मदद मिलेगी।

यदि आपको पता नहीं है कि ईवेंट MouseMove ईवेंट के साथ हैंडलर को कैसे पंजीकृत किया जाए, तो इस कोड को अपने फॉर्म कन्स्ट्रक्टर ( InitializeComponent के बाद) में जोड़ने का प्रयास करें:

treeView1.MouseMove += treeView1_MouseMove;
0
जोड़ा