2011-04-06 20 views
5

में अचयनित नोड मेरे पास Winform पर TreeView नियंत्रण है। मैं कई नोड्स को अचयनित करना चाहता हूं। मैं इसे कैसे प्राप्त कर सकता हूं।
मेरे दिमाग में केवल एक विचार है - कस्टम खींचे गए नोड्स, लेकिन अधिक आसान तरीका मौजूद हो सकता है? कृपया मुझे सलाहTreeView

मैं पहले से ही BeforeSelect ईवेंट हैंडलर में इस तरह के कोड की कोशिश की है:

private void treeViewServers_BeforeSelect(object sender, TreeViewCancelEventArgs e) 
{ 
    if (e.Node.Parent != null) 
    { 
    e.Cancel = true; 
    } 
} 

लेकिन यह फायदा हुआ असर उपयुक्त नहीं है। नोड अस्थायी चयन प्राप्त करते हैं जब मैं उस पर बायां माउस बटन दबा रहा हूं।

अग्रिम धन्यवाद!

उत्तर

4

यदि आप एक चयन योग्य नोड पर क्लिक करते हैं तो आप माउस ईवेंट को पूरी तरह से अक्षम कर सकते हैं।

ऐसा करने के लिए, आप TreeView एक निम्न कोड

public class MyTreeView : TreeView 
{ 
    int WM_LBUTTONDOWN = 0x0201; //513 
    int WM_LBUTTONUP = 0x0202; //514 
    int WM_LBUTTONDBLCLK = 0x0203; //515 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_LBUTTONDOWN || 
      m.Msg == WM_LBUTTONUP || 
      m.Msg == WM_LBUTTONDBLCLK) 
     { 
      //Get cursor position(in client coordinates) 
      Int16 x = (Int16)m.LParam; 
      Int16 y = (Int16)((int)m.LParam >> 16); 

      // get infos about the location that will be clicked 
      var info = this.HitTest(x, y); 

      // if the location is a node 
      if (info.Node != null) 
      { 
       // if is not a root disable any click event 
       if(info.Node.Parent != null) 
        return;//Dont dispatch message 
      } 
     } 

     //Dispatch as usual 
     base.WndProc(ref m); 
    } 
} 
+0

ग्रेट में दिखाया गया ओवरराइड करने के लिए है! मैं दाएं बटन के लिए निस्पंदन भी जोड़ता हूं और अब मेरा पेड़ दृश्य पूरी तरह से काम करता है! आपका बहुत बहुत धन्यवाद! –

+1

क्या होगा यदि उपयोगकर्ता कुंजी बोर्ड (ऊपर, नीचे, बाएं, दाएं) कुंजी का उपयोग करके नोड का चयन करता है – Thunder

+4

मेरी पोस्ट में कोड केवल माउस क्लिक के मामले में चयन रद्द कर देता है, जो प्रश्न में कोड द्वारा नियंत्रित नहीं किया जाता है। लेकिन कीबोर्ड कुंजी चयन के लिए, TreeViewServers_Before ईवेंट में ईवेंट को रद्द करने के लिए पर्याप्त है (या यदि आप इसे ओवरराइड करते हैं तो चयन करें)। बेशक आपको चयन से पूरी तरह से बचने के लिए दोनों कोडों को गठबंधन करने की आवश्यकता है। – digEmAll