2009-01-19 14 views
6

खो गया है जब चयनित नोड को हाइलाइट किया गया है मैंने Treeview.HideSelection = false को बदल दिया है; लेकिन मैं कैसे बीमा करूं कि जब फोकस खो जाता है तो चयनित आइटम मूल चयनित रंग बना रहता है?सी # मैं कैसे सुनिश्चित करूं कि फोकस

संपादित करें:

मैं एक रूप है कि इस प्रक्रिया की घटनाओं की एक सूची रखता है पर सूचीदृश्य है। उसी फ़ॉर्म पर ट्रीव्यू के साथ-साथ चयनों की एक श्रृंखला है जिसे उपयोगकर्ता सूचीदृश्य में ईवेंट वर्गीकृत करने के लिए पूरा करता है। हालांकि, जब उपयोगकर्ता वर्गीकरण नियंत्रणों में से एक पर चयन करता है तो नीली हाइलाइट चयनित ट्रीव्यू आइटम एक ग्रे रंग में बदल जाता है। मैं उस संपत्ति को ढूंढने की उम्मीद कर रहा था जो इस रंग को एक ही रंग नीला बनाने के लिए परिभाषित करता है।

कोई सुझाव।

अद्यतन:

public partial class myTreeView : TreeView 
{ 
    TreeNode tn = null; 
    public myTreeView() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnAfterSelect(TreeViewEventArgs e) 
    { 
     if (tn != null) 
     { 
      tn.BackColor = this.BackColor; 
      tn.ForeColor = this.ForeColor; 
     } 
     tn = e.Node; 
     base.OnAfterSelect(e); 
    } 
    protected override void OnBeforeSelect(TreeViewCancelEventArgs e) 
    { 

     e.Node.BackColor = Color.Green; 
     e.Node.ForeColor = Color.White; 
     base.OnBeforeSelect(e); 
    } 
    protected override void OnGotFocus(System.EventArgs e) 
    { 

     base.OnGotFocus(e); 
    } 

    protected override void OnLostFocus(System.EventArgs e) 
    { 

     if (tn != null) 
     { 
      tn.BackColor = Color.Green; 
      tn.ForeColor = Color.White; 
     } 
     // tn.BackColor = Color.Red; 

     base.OnLostFocus(e); 
    } 
} 
+0

क्या आप पूरे ऐप या केवल उस विशिष्ट फ़ील्ड पर ध्यान केंद्रित करने के बारे में बात कर रहे हैं? साथ ही, क्या आइटम को चुना जाना चाहिए, या इसे स्वयं का चयन करना चाहिए? –

+0

मुझे संदेह है कि आप किसी अन्य समस्या को हल करने की कोशिश कर रहे हैं, और चयन रंग के साथ गड़बड़ करना आपके विचार को हल करने का विचार है। मुझे लगता है कि यह एक बुरा विचार है। इसके बजाय अपनी मूल समस्या के बारे में पूछें। निश्चित रूप से एक बेहतर समाधान है। –

उत्तर

11

ListView.HideSelection को सही करने का अर्थ है कि जब फोकस खो जाता है, तो यह चयन छुपाएगा। HideSelection को गलत पर सेट करके, चयनित आइटम में अभी भी रंग संकेतक दिखाएगा कि कौन सा आइटम चुना गया है।

+0

धन्यवाद, मेरे भाग पर टाइपो – Brad

1

आम तौर पर, तुम नहीं। रंग में परिवर्तन दृश्य संकेतों में से एक है जो इंगित करता है कि किस नियंत्रण पर ध्यान केंद्रित किया गया है। इससे छुटकारा पाने से अपने ग्राहकों को भ्रमित न करें।

यदि आप सम्मेलन को बाना चाहते हैं, तो आप अपना नियंत्रण मालिक-तैयार कर सकते हैं, और फिर आप जो भी रंग चाहते हैं उसे चित्रित कर सकते हैं।

एक और विकल्प, आपके मामले में, एक सूची बॉक्स के बजाय ड्रॉप-डाउन कॉम्बो बॉक्स का उपयोग करना है। फिर वर्तमान चयन हमेशा स्पष्ट होता है, इससे कोई फर्क नहीं पड़ता कि नियंत्रण पर ध्यान केंद्रित किया गया है या नहीं। या, आप एक ग्रिड का उपयोग करने पर विचार कर सकते हैं, जहां प्रत्येक कार्यक्रम में अपनी सभी सेटिंग्स अलग-अलग दी जाती हैं, और फिर "चयन" कोई फर्क नहीं पड़ता।

+0

सम्मेलन एक पाखंड है ... ListBox या DataGridView को आज़माएं। फोकस में नहीं होने पर भी दोनों नीली हाइलाइट बनाए रखते हैं। – Christian

+0

मुझे इस तरह के उत्तरों से अच्छा हंसी मिलती है। "यह ऐसा काम नहीं करता है। अपना खुद का बनाओ"। किसी भी तरह से चयन के हाइलाइट रंग की वजह से स्क्रैच से उपयोगकर्ता नियंत्रण करेगा – makoshichi

0

अगर मैं इसे कर रहा था, तो मेरे पास चयन दृश्य के ऊपर सूची दृश्य के साथ एक अतिरिक्त लेबल होगा, जो वर्गीकरण नियंत्रणों के चयन के ऊपर होगा, जो इंगित करेगा कि कौन सी प्रक्रिया घटना का चयन किया गया है। आप घटना के बारे में अतिरिक्त विवरण जोड़ने के लिए कहा लेबल का भी उपयोग कर सकते हैं (यदि कोई हो)।

इस तरह, आप मानक यूआई सम्मेलनों और पर चिपके हुए हैं जिससे उपयोगकर्ता को यह स्पष्ट हो जाता है कि उनका वर्तमान चयन क्या है।

-2

मुझे HideSelection = false पसंद है; जवाब है, क्योंकि:

  1. यह आसान है

  2. मैं एक खोज समारोह है कि नोड्स के माध्यम चक्र और बदलते यह पीले करने के लिए पृष्ठभूमि है, से प्रासंगिक लोगों के निशान है जब नोड एक पाठ बॉक्स भरण पर उपयोगकर्ता क्लिक करता है उस नोड से जुड़ी प्रासंगिक जानकारी के साथ, मैंने इस विधि का उपयोग करने से पहले, यदि उपयोगकर्ता ने स्क्रॉल करने के लिए टेक्स्टबॉक्स पर क्लिक किया था, तो यह नोड को उजागर करेगा और ट्रैक को ट्रैक करने के लिए कठिन बना देगा कि किस नोड का चयन किया गया था, इस तरह यह अभी भी है हल्के भूरे रंग के रंग में हाइलाइट किया गया यह दिखाता है कि यह फोकस में नहीं है, नीली हाइलाइट का विरोध करता है जिसका उपयोग फोकस में किया जाता है। मैं नोड को 'चित्रित' कर सकता था लेकिन खोज परिणामों के लिए पीले रंग की पृष्ठभूमि के साथ जीवन की आवश्यकता होने से ज़्यादा जटिल हो गई थी।

  3. क्या मैंने उल्लेख किया कि यह आसान था?

0

मैं इस कोड का उपयोग करता हूं; इससे मेरा काम बनता है।

डिज़ाइन: Mytreeview.HideSelection = True आप खोए गए फोकस चयनित नोड को मैन्युअल रूप से हाइलाइट करेंगे।

Private Sub MyTreeview_Leave(sender As Object, e As EventArgs) Handles MyTreeview.Leave 
    MyTreeview.SelectedNode.BackColor = Color.LemonChiffon 
End Sub 

Private Sub MyTreeview_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles MyTreeview.BeforeSelect 
    If MyTreeview.SelectedNode IsNot Nothing Then 
     MyTreeview.SelectedNode.BackColor = Color.White 
End Sub 
संबंधित मुद्दे

 संबंधित मुद्दे