घटना सदस्यता समाप्त करने से पहले आप सेट:
0:
check1.CheckChanged -= check1_CheckChanged;
तो आप प्रोग्राम मूल्य चेकबॉक्स बिना अपनी CheckChanged घटना फायरिंग सेट कर सकते हैं
तो फिर से सदस्यता ले:
check1.CheckChanged += check1_CheckChanged;
[संपादित करें: 29 मार्च 2012]
तन्वी के दृष्टिकोण के साथ समस्या यह है कि आप पुस्तिका की जांच के सभी स्रोत पकड़ने या सही का निशान की जरूरत है। ऐसा नहीं है कि यह बहुत अधिक है (यह केवल माउस क्लिक से और उपयोगकर्ता को स्पेसबार दबाकर) है, लेकिन आपको माउसक्लिक और कीअप (स्पेसबार का पता लगाने) से एक रिफैक्टर घटना का आह्वान करना होगा
यह चेकबॉक्स के लिए अधिक साफ है (इसके लिए कोई नियंत्रण यह मामला) उपयोगकर्ता इनपुट (कीबोर्ड, माउस, आदि) के स्रोत के अज्ञेयवादी होने के लिए, इसलिए इसके लिए मैं केवल चेकबॉक्स की प्रोग्रामेटिक सेटिंग को प्रोग्रामेटिक बना दूंगा। उदाहरण के लिए, आप एक विस्तार विधि के लिए संपत्ति के कार्यक्रम संबंधी सेटिंग लपेट कर सकते हैं:
static class Helper
{
public static void SetCheckProgrammatically(
this CheckBox c,
EventHandler subscribedEvent, bool b)
{
c.CheckedChanged -= subscribedEvent; // unsubscribe
c.Checked = b;
c.CheckedChanged += subscribedEvent; // subscribe
}
}
इस दृष्टिकोण का उपयोग करना, अपने कोड CheckChanged के माध्यम से केवल एक ही घटना है, अर्थात के माध्यम से दोनों उपयोगकर्ता के माउस इनपुट और कुंजीपटल इनपुट करने के लिए बड़े करीने से प्रतिक्रिया कर सकते हैं। कोड का कोई डुप्लिकेशंस नहीं है, एकाधिक घटनाओं की सदस्यता लेने की आवश्यकता नहीं है (उदाहरण के लिए कीबोर्ड, स्पेसबार दबाकर चेकबॉक्स को चेक/अनचेक करना)
स्रोत
2010-03-19 13:00:19
मुझे यह समाधान पसंद है, लेकिन यदि किसी दिए गए प्रोजेक्ट पर एकाधिक कोडर हैं तो क्या हर किसी को इस संपत्ति को बदलने पर हर बार सदस्यता लेने की आवश्यकता नहीं होगी? – Coops
विस्तार गुणों, er .. एक्सटेंशन विधियों के साथ इसे लपेटें। जैसे check1.SetCheckedRaw (BooleanHere) –