2010-07-12 17 views
8

मेरे पास सूची सूची नियंत्रण के साथ सी # में विनफॉर्म ऐप है। यह ListView TO-DO आइटमों की एक सूची दिखाता है और मैं अद्यतनों को संभालने के लिए 'ItemSelectionChanged' ईवेंट का उपयोग कर रहा हूं।सूची दृश्य आइटम चयन दो बार आग लग गई?

समस्या यह है कि 'आइटम चयन चयन' घटना हर बार दो बार आग लगती है जब मैं अद्यतन करने का प्रयास करता हूं।

आइटम चयन चयन घटना अद्यतनों का प्रतिनिधित्व करने के लिए फॉर्म को ताज़ा करती है (यानी सूची से आइटम हटाएं)।

रीफ्रेश के बाद फायरिंग से ईवेंट को अक्षम करने का कोई तरीका है?

Update1:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
    { 
     if (e.IsSelected) 
     {     
      listView1.Items[e.ItemIndex].Remove(); 

      listView1.SelectedIndices.Clear(); 
      listView1.Focus(); 

      listView1.Update(); 
     } 
     else 
     { 

     } 

    } 

उत्तर

10

हाँ ताज़ा समाप्त हो गया है, यह दो बार आग लग जाएगी। एक बार क्योंकि पहले चयनित आइटम को अचयनित किया गया, फिर से नए चुने हुए आइटम के लिए। तुम सिर्फ यकीन है कि आप चयन घटना को देखने करना है:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { 
     if (e.IsSelected) { 
      // Update form 
      //... 
     } 
    } 
+0

धन्यवाद लेकिन IsSelected मेरे लिए काम नहीं किया। मेरे कोड के बारे में कुछ और होना चाहिए जो इसे दो बार फायरिंग रखता है। –

+0

नहीं, यह निश्चित रूप से दो बार आग लग जाएगा। यह डिजाइन द्वारा है। बिंदु उस व्यक्ति को पहचानना है जिसमें आप रुचि रखते हैं। जो आपके प्रश्न से स्पष्ट नहीं है। –

1

हाँ बस ताज़ा के शुरू में eventhandler निकालकर उसे दोबारा जोड़ने के बाद यह

यानी

// Remove handler 
listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 

// Do refresh 

// Add again 
listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 
+0

क्या मुझे 'ऑन चयन चयन' के लिए कोई अतिरिक्त संदर्भ चाहिए? –

+1

नहीं, आपको केवल ListView को अपने ListViewControl यानी ListView1 के नाम से प्रतिस्थापित करने की आवश्यकता है और विधि नाम उस फ़ंक्शन का नाम होना चाहिए जिसे ऑनसेलेक्शन चेंज इवेंट निकाल दिया जाता है यानी ListView1_OnSelectionChanged जहां ListView1 फिर से आपके ListViewControl – w69rdy

+0

का नाम है 'ऑन चयन चयन' इंटेलिजेंस में दिखाई नहीं देता है। –

0

मैं तुम्हें अपने हैंडलर के अंत में आइटम का चयन रद्द करें मैन्युअल रूप से की जरूरत है।

listView1.SelectedItem = null;

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