2012-07-15 18 views
20

कृपया मेरे प्रश्न को एक डुप्लिकेट नहीं पढ़ें।रेडियो बटन की जांच की गई घटना दो बार आग लगती है

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

private void radioButtons_CheckedChanged(object sender, EventArgs e) 
{ 
    //My Code 
} 

मैं दो बार इस घटना दोहराता भीतर ब्रेकपाइंट और पूरे कोड डाला:

यहाँ मेरी कोड है। कृपया मुझे बताएं कि यह ऐसा क्यों व्यवहार कर रहा है?

+1

अपने प्रश्न यहाँ एक उदाहरण है जो तीन नियंत्रण, rbTextNumeric, rbTextFixed और rbTextFromFile संभालती है पहले से ही उत्तर दिया गया है कृपया http://stackoverflow.com/questions/8050296/asp-net-4-0-radio-button-checked-changed-event-fires-only-once – HatSoft

+1

पोस्ट करें यह दिखाई नहीं देता है कि आपका लिंक उत्तर इस सवाल से संबंधित है। –

उत्तर

45

अन्य answerers के रूप में ठीक ही कहते हैं, घटना दो बार निकाल दी जाती है क्योंकि जब भी किसी समूह के भीतर एक रेडियोबटन चेक किया जाता है तो दूसरा अनचेक किया जाएगा - इसलिए चेक की गई घटना दो बार आग लग जाएगी।

केवल RadioButton जो केवल आपके इस वस्तु को देखने के कर सकते हैं चयनित किया गया है के लिए इस घटना के भीतर किसी भी काम करने के लिए, कुछ इस तरह कर रही है:

void radioButtons_CheckedChanged(object sender, EventArgs e) 
{ 
    RadioButton rb = sender as RadioButton; 
    if (rb != null) 
    { 
     if (rb.Checked) 
     { 
      // Only one radio button will be checked 
      Console.WriteLine("Changed: " + rb.Name); 
     } 
    } 
} 
+1

क्या आप पतले नहीं हैं 'अगर (आरबी! = नल)' अनावश्यक है? –

+2

@MuhammadAliDildar यह यहां एक शून्य संदर्भ अपवाद के किसी भी मौके से बचाता है - निश्चित रूप से जब आप सभी घटनाओं को तार देते हैं, तो आप निश्चित रूप से सुनिश्चित हो सकते हैं कि यह ईवेंट हैंडलर केवल रेडियोधटन से जुड़ा होगा, लेकिन 'सर्वोत्तम अभ्यास' करने का तरीका चीजें यह जांचना है कि कलाकार ने काम किया था। फिर फिर - जब आप इवेंट हैंडलर को गलत तरीके से संलग्न करते हैं तो एक अपवाद फेंकने के एक निश्चित बिंदु से गलत हो सकता है ताकि आप कोड को ठीक कर सकें। –

+0

बहुत बहुत धन्यवाद। यह मेरी समस्या हल हो गया। –

3

चेक किए गए संपत्ति में परिवर्तन होने पर चेक किए गए चेंज को उठाया जाता है। यदि आप रेडियोबटन का चयन करते हैं तो पहले चयनित रेडियोबटन अनचेक किया जाता है (चेक किया गया चेक किया गया), और फिर नया रेडियोबटन चेक किया गया है (चेक किया गया चेक किया गया)।

2

यह अनियंत्रित करने के लिए जाँच की से रेडियो बटन संक्रमण के लिए एक बार ट्रिगर, और फिर से जाँच की के आगे वाले चेक से रेडियो बटन संक्रमण के लिए (यानी जाँच की राज्य में किसी भी बदलाव से चलाता घटना)

0

आप स्वत: जाँच संपत्ति सच प्रत्येक RadioButton के लिए सेट कर सकते हैं फिर चेक चेंज किए गए ईवेंट की बजाय क्लिक ईवेंट को पकड़ें। इससे यह सुनिश्चित होगा कि केवल एक ईवेंट निकाल दिया गया है, और हैंडलर में तर्क प्रेषक को क्लिक करने के लिए आवश्यक होने पर रेडियोबटन टाइप करने के लिए डाला जा सकता है। हैंडलर तर्क सरल है तो अक्सर कास्ट से बचा जा सकता है।

 private void rbText_Click(object sender, EventArgs e) 
    { 
     flowLayoutPanelTextNumeric.Enabled = rbTextNumeric.Checked; 
     txtBoxTextFixed.Enabled = rbTextFixed.Checked; 
     flowLayoutPanelTextFromFile.Enabled = rbTextFromFile.Checked; 
    } 
0
{ 
    public partial class Form3 : Form 
    { 
     public Form3() 
     { 
      InitializeComponent(); 
     } 
     int click = 0; 
     private void radioButton1_Click(object sender, EventArgs e) 
     { 
      click++; 
      if (click %2==1) 
      { 
       radioButton1.Checked = true; 
      } 
      if (click %2==0) 
      { 
       radioButton1.Checked = false; 
      } 
      if (radioButton1.Checked==true) 
      { 
       label1.Text = "Cheked"; 
      } 
      if (radioButton1.Checked==false) 
      { 
       label1.Text = "Uncheked"; 
      } 
     } 

    } 
} 
+1

शायद आपको उपरोक्त कोड के लिए कुछ स्पष्टीकरण जोड़ना चाहिए? – davidkonrad

+0

@ डेविडकोनाड * असली * कोड को कभी भी स्पष्टीकरण की आवश्यकता नहीं है! रवींद्र! –

0

यह बचने के लिए, यदि radioButton उदाहरण के लिए चेक किया गया है

सिर्फ जाँच:

private void radioButton1_CheckedChanged(object sender, EventArgs e) 
{ 
    if (radioButton1.Checked == true) 
     //your code 
} 
संबंधित मुद्दे