2010-05-06 19 views
42

विंडोज फॉर्म' CheckBox नियंत्रण CheckedChanged और CheckStateChanged ईवेंट दोनों लागू करता है। जहां तक ​​मैं कह सकता हूं, चेकबॉक्स की चेक स्थिति बदल जाने पर दोनों आग लगती हैं।विंडोज फॉर्म 'चेकबॉक्स चेकड चेंज बनाम चेकस्टेट चेंज

CheckedChangedCheckStateChanged से पहले, लेकिन इसके अलावा मुझे कोई फर्क नहीं पड़ता। क्या मैं कुछ भूल रहा हूँ? क्या किसी को दूसरे पर पसंद किया जाना चाहिए?

उत्तर

18

मेरा अनुमान है कि इसे त्रि-राज्य चेकबॉक्स के साथ करना होगा।

if (this.checkState != value) 
{ 
    bool flag = this.Checked; 
    this.checkState = value; 
    if (base.IsHandleCreated) 
    { 
    base.SendMessage(0xf1, (int) this.checkState, 0); 
    } 
    if (flag != this.Checked) 
    { 
    this.OnCheckedChanged(EventArgs.Empty); 
    } 
    this.OnCheckStateChanged(EventArgs.Empty); 
} 
55

CheckState (और इस प्रकार CheckStateChanged) एक चेकबॉक्स तीन मान हो सकते हैं कि उपयोग करने के लिए अनुमति देते हैं:: यह CheckState सेटर की हिम्मत है यह जाँच की जा सकती, अनियंत्रित या 'अनिश्चित' - यानी यह ThreeState सेट करने के लिए है सच।

यदि आप थ्रीस्टेट का उपयोग नहीं कर रहे हैं, तो चेकड चेंज की आपको आवश्यकता है।

-2

नए मूल्य से पहले चेकस्टेट आग लगती है। नए मूल्य के बाद चेकस्टेट चेंज की गई आग।

यदि आप चेकबॉक्स मान संशोधन के बाद अद्यतन करने के लिए dataset.haschanges की तलाश में हैं तो आपको चेकस्टेटेड ईवेंट का उपयोग करने की आवश्यकता है। बस वहां पहुंचने के साथ मुद्दों से बचने के लिए threestate अक्षम करने के लिए सुनिश्चित करें।

+1

यह गलत है, मान के बाद दोनों घटनाएं आग लग गई हैं। –

1

जहां तक ​​मेरा बता सकते हैं:

CheckChanged निकाल दिया जाता है से पहले जाँच की मूल्य बदल गया है, तो .Checked रिटर्न क्या मूल्य था,

CheckStateChanged निकाल दिया जाता है के बाद जाँच की मूल्य बदल गया है, तो .Checked रिटर्न क्या मूल्य

+1

यह गलत है, मान के बाद दोनों घटनाएं आग लग गई हैं। –

4

है दो घटनाओं जब तक आप true को ThreeState गुण सेट प्रभावी रूप से एक ही हैं। ThreeState सेट किए बिना, चेक बॉक्स चेक या अनचेक होने पर दोनों आग लग जाएंगे और दोनों के बाद आग लग जाएंगी।

  • नियंत्रण मानता है Indeterminate "जाँच" होने के लिए:

    मुख्य अंतर यह है कि जब आप सही पर ThreeState, जो IndeterminateCheckState कहते हैं स्थापित कर सकता है। (Checked == true)।

  • Checked और Unchecked के बीच संक्रमण पहले जैसा ही है।
  • Checked और Indeterminate के बीच संक्रमण, नहीं आग CheckedChanged घटना है, क्योंकि Checked रहता true
  • Unchecked और Indeterminateके बीच संक्रमण आग CheckedChanged घटना है, क्योंकि Checkedfalse से true या में परिवर्तन उपाध्यक्ष प्रतिकूल।
  • तीन राज्य चेकबॉक्स पर क्लिक करके, राज्य Unchecked से Checked से Indeterminate और Unchecked पर संक्रमण।आप अभी भी Unchecked से Indeterminate प्रोग्रामेटिक रूप से संक्रमण कर सकते हैं।

(नोट Checked संपत्ति है, जो एक दो राज्य बूलियन संपत्ति है, और Checked राज्य है, जो CheckState संपत्ति के तीन संभावित मान में से एक है के बीच का अंतर।)

टी एल; डॉ: मुख्य व्यावहारिक अंतर यह है कि CheckedChanged घटना CheckState.Checked से CheckState.Indeterminate या इसके विपरीत, जब दोनों राज्यों को चेक किया जाता है (Checked == true) पर संक्रमण करते समय तीन राज्य चेकबॉक्स पर आग नहीं लगती है।

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