2010-08-26 13 views
5

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

कृपया मुझे मार्गदर्शन करें।

+0

mislabeling के लिए आबादी - वैसे ही आप VB.NET में या पिज्जा खाने के दौरान करते हैं। आप किस नियंत्रण के बारे में बात करते हैं? डब्ल्यूपीएफ या WinForms? – TomTom

+0

मेरा मतलब है, मुझे टेक्स्ट बॉक्स/कम्बोबॉक्स/चेक बॉक्स मानों में परिवर्तनों का पता लगाने की आवश्यकता है, यदि पहले से भरे हुए फॉर्म मानों से कोई परिवर्तन पता चला है, तो केवल एक बटन अक्षम करें। – Asad

+0

एप्लिकेशन वीएस सी # .net – Asad

उत्तर

11

नहीं, मुझे किसी भी घटना से अवगत नहीं है जब किसी भी फ़ॉर्म परिवर्तनों पर नियंत्रण होता है।

मेरी सलाह व्यक्तिगत रूप से प्रत्येक कार्यक्रम की सदस्यता लेनी होगी (यदि आपके फॉर्म में इतने सारे नियंत्रण हैं कि यह वास्तव में करना मुश्किल है, तो आप अपने यूआई को फिर से सोचना चाहेंगे)।

आप पूरी तरह सब नियंत्रण में परिवर्तन करने के लिए सदस्यता चाहिए तो आप के लिए निम्न कुछ इसी तरह विचार करना चाह सकते:

foreach (Control c in this.Controls) 
{ 
    c.TextChanged += new EventHandler(c_ControlChanged); 
} 

void c_ControlChanged(object sender, EventArgs e) 
{ 

} 

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

इसके अलावा, TextChanged घटना कुछ नियंत्रण प्रकारों (जैसे टेक्स्टबॉक्स) के लिए एक उपयुक्त घटना नहीं हो सकती है - इस मामले में आपको सही घटना की सदस्यता लेने में सक्षम होने के लिए नियंत्रण प्रकार कास्ट और परीक्षण करने की आवश्यकता होगी, उदाहरण के लिए :

foreach (Control c in this.Controls) 
{ 
    if (c is CheckBox) 
    { 
     ((CheckBox)c).CheckedChanged += c_ControlChanged; 
    } 
    else 
    { 
     c.TextChanged += new EventHandler(c_ControlChanged); 
    } 
} 
+3

का उपयोग करने में बनाया गया एक विंडोज़ फॉर्म एप्लिकेशन है, आप यह भी समस्या में भाग लेते हैं कि यह विधि उप-नियंत्रणों से निपटती नहीं है, जैसे किसी पैनल/फ़्लोलाउट पैनेल/टेबललेआउट पैनेल आदि में टेक्स्टबॉक्स। – Pondidum

4

इसके बजाय नियंत्रण तक पहुँचने का सीधे आप एक मॉडल उद्देश्य यह है कि INotifyPropertyChanged लागू करता है करने के लिए DataBind कर सकते हैं।

जब भी उपयोगकर्ता ऐसा कुछ करता है जो आपके मॉडल में डेटा को बदलने के कारण आपको अधिसूचित किया जाएगा और उचित कार्रवाई कर सकता है।

यह संभवतः फ़ॉर्म नियंत्रणों में और बाहर मूल्य प्राप्त करने के लिए आवश्यक कोड की मात्रा पर भी कटौती करेगा।

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