2009-12-24 9 views
10

मेरे पास कई टेक्स्टबॉक्स और अन्य नियंत्रणों वाला एक फॉर्म है। मैं errorprovider नियंत्रण का उपयोग कर रहा हूं और मैंने प्रत्येक टेक्स्टबॉक्स पर मान्य ईवेंट वायर्ड किया है जिसे मुझे सत्यापित करने की आवश्यकता है। मान्यकरण तब होता है जब नियंत्रण किसी अन्य नियंत्रण पर ध्यान केंद्रित करता है। तो घटना तब होती है जब आप मौजूदा नियंत्रण से दूर जाने के लिए टैब कुंजी का उपयोग करते हैं या जब आप माउस 1 के साथ किसी अन्य नियंत्रण पर क्लिक करते हैं। और मुझे लगता है कि यह बहुत ही परेशान है, उदाहरण के लिए, अगर मैं इस विनफॉर्म को खोलता हूं, और फिर इसे बंद करने का प्रयास करता हूं, तो यह मुझे नहीं जाने देगा, क्योंकि सत्यापन यह शिकायत करेगा कि पहले टेक्स्टबॉक्स में कोई टेक्स्ट दर्ज नहीं है।एक ही समय में एक सी # विंडोज़ फॉर्म पर कई टेक्स्टबॉक्सों को मान्य करना

मैं जो व्यवहार चाहता हूं वह त्रुटिप्रोवाइडर का उपयोग कर रहा है, मैं फॉर्म के सेव बटन पर क्लिक करते समय केवल पूरे फॉर्म को कैसे सत्यापित कर सकता हूं?

धन्यवाद

+0

+1 मुझे उससे भी नफरत है – albertein

उत्तर

10

संपत्ति Form.AutoValidate देखें।

संभावित:

  • अक्षम

अंतर्निहित सत्यापन घटित नहीं होगा। इस मान को सेट करना को स्पष्ट कॉल में हस्तक्षेप नहीं करेगा मान्य या मान्य करें।

  • EnablePreventFocusChange

अंतर्निहित मान्यता तब होता है जब नियंत्रण ध्यान केंद्रित खो देता है।

  • EnableAllowFocusChange

अंतर्निहित सत्यापन होता है, लेकिन सत्यापन विफल रहता है, ध्यान दिया जाएगा अभी भी नए नियंत्रण करने के लिए परिवर्तन। यदि सत्यापन विफल रहता है, तो मान्य घटना आग नहीं जाएगी।

EnableAllowFocusChange के लिए यह निर्धारित करना प्रपत्र खोलने और immediatly इसे बंद करने के बाद से फोकस रद्द करें बटन को हस्तांतरित किया जाएगा कोशिश कर के समस्या का समाधान होगा।

यदि आप सत्यापन पर पूर्ण नियंत्रण चाहते हैं तो आप इसे Disable पर सेट कर सकते हैं और Form.Validate और Form.ValidateChildren का उपयोग कर मैन्युअल सत्यापन कर सकते हैं। मैं 100% निश्चित नहीं हूं लेकिन मेरा मानना ​​है कि Form.ValidateChildrenTabControl के अंदर रखे गए नियंत्रणों के लिए सत्यापन ईवेंट ट्रिगर नहीं करेगा।

+0

इससे काफी मदद मिलती है, धन्यवाद। – Edwin

0

वहाँ किसी भी तरह से बचाने पर नियंत्रण को मान्य करने के WinForms प्राप्त करने के लिए नहीं है। किसी वेब फॉर्म के विपरीत, कोई भी "सबमिट" या "सेव" ईवेंट नहीं है (कम से कम फॉर्म पर नहीं)। आप फॉर्म को इस तरह से व्यवहार करने के लिए प्रोग्राम कर सकते हैं, लेकिन आप डेटा बाइंडिंग का उपयोग करने में सक्षम नहीं होंगे (सहेजें मॉडल सेट करेगा और त्रुटियों की जांच करेगा)।

शायद बेहतर तरीका यह है कि त्रुटियों को दिखाने के लिए एक संवाद का उपयोग न करें (मुझे लगता है कि आप कह रहे हैं क्योंकि आप यह कह रहे हैं कि यह फॉर्म बंद करने में एक समस्या है)। टूलटिप्स बेहतर उपयोगकर्ता अनुभव प्रदान कर सकते हैं। यदि उपयोगकर्ता टूलटिप्स को अनदेखा करता है, तो आप सहेजते समय एक संवाद प्रदान कर सकते हैं। खराब डेटा होने पर भी वे फ़ॉर्म को बंद करने में सक्षम होंगे।

0

सभी नियंत्रणों (सहेजें बटन को छोड़कर) पर कारणों को वैधता सेट करें गलत पर। यह बटन को छोड़कर सभी नियंत्रणों के लिए मान्य घटना को दबा देगा। यह संभवतः सटीक व्यवहार नहीं हो सकता है, क्योंकि जब आप बटन पर फ़ोकस बदलते हैं तो कष्टप्रद व्यवहार तब होता है, लेकिन यह आपके नज़दीक है जो आप चाहते हैं।

एक अन्य विकल्प है कि अगर काम नहीं करता है, जब बटन क्लिक किया और उन्हें मैन्युअल रूप से मान्य एक समय में एक तरीके के लिए नियंत्रण लूप करने के लिए है ...

यहाँ MSDN लिंक है: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx

1

जियोए एंजेलो ने इसे अद्यतन रखने के लिए बस कहा। फॉर्म। वैलिडेट चिल्ड्रेन() नियंत्रण के सत्यापन को ट्रिगर नहीं करेगा चलो समूह समूह या टैबकंट्रोल कहें।

हालांकि, अगर आप अतिभारित ValidateChildren(ValidationConstraints) विधि के लिए ValidationContraints गुजरती हैं और कोई नहीं है जो करने के लिए सेट कर सकते हैं: "। सभी बच्चे नियंत्रण, और इन बच्चे नियंत्रण के सभी बच्चों पुष्टि उनकी संपत्ति सेटिंग्स की परवाह किए बिना"

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