सिम्बे के दृष्टिकोण का उत्तर देने के लिए, जो मुझे लगता है कि इसे खारिज कर दिया जा रहा है।
आप टेक्स्ट चेंज में पूर्ववत नहीं कह सकते हैं क्योंकि पूर्ववत ऑपरेशन अभी भी टेक्स्टबॉक्स द्वारा तैयार किया जा रहा है। ऐसा लगता है कि कभी-कभी काम नहीं होता है और दूसरी बार नहीं, इसलिए यह सुझाव देता है कि घटना के संकेत के दौरान दौड़ की स्थिति और पूर्ववत तैयारी के पूरा होने के बीच दौड़ की स्थिति है।
हालांकि डिस्पैचर पर लगाए गए अंडो को कॉल करने से टेक्स्ट बॉक्स को पूर्ववत तैयारी पूरी करने की अनुमति मिल जाएगी। आप टेक्स्ट परिवर्तन के परिणामों को प्रमाणित कर सकते हैं और फिर यह तय कर सकते हैं कि आप परिवर्तन को रखना या पूर्ववत करना चाहते हैं या नहीं। यह सबसे अच्छा तरीका नहीं हो सकता है, लेकिन मैंने कोशिश की और टेक्स्ट बॉक्स में पाठ परिवर्तनों और पेस्टों का एक गुच्छा विस्फोट किया और अपवाद को पुन: उत्पन्न नहीं कर सका।
"स्वीकृत उत्तर" केवल तभी महान होता है जब आप किसी अमान्य चरित्र को दर्ज या पेस्ट करने से रोकना चाहते हैं, लेकिन आम तौर पर मैं अक्सर टेक्स्टबॉक्स इनपुट की बहुत अधिक शामिल सत्यापन करता हूं और अंतिम टेक्स्ट मान सत्यापित करना चाहता हूं। पूर्वावलोकन ईवेंट से अंतिम पाठ को समझना आसान नहीं है क्योंकि जहां तक नियंत्रण का संबंध है, अभी तक कुछ भी नहीं हुआ है।
टेरिबैड के प्रश्न का उत्तर देने के लिए, सिंबे का उत्तर बेहतर और अधिक परिस्थितियों में अधिक संक्षिप्त है।
tb.TextChanged =+ (sender, args) =>
{
if(! MeetsMyExpectations(tb.Text))
Dispatcher.BeginInvoke(new Action(() => tb.Undo()));
}
मैंने टेक्स्ट बॉक्स सत्यापन में बहुत सारे जंगली रोमांच पढ़े हैं और यह जितना आसान है उतना आसान है।
आपको इसके बजाय व्यवहार का उपयोग करना चाहिए। – SepehrM
सेपेरम - क्या आप एक उदाहरण प्रदान कर सकते हैं? क्या होगा यदि आप अभी तक मान्य नहीं करना चाहते हैं, लेकिन बस अपने सत्र को उड़ाने से इस अपवाद संदेश को रोकना चाहते हैं? मुझे यह मिल रहा है जब कोई उपयोगकर्ता बहुत तेज़ी से टाइप करता है या शायद फ़ील्ड में डेटा का एक हिस्सा चिपकाता है। मान्य भी नहीं है। – Allen