2011-03-12 13 views
6

मेरे पास एक टेक्स्टबॉक्स नियंत्रण है जिसे कभी-कभी प्रोग्रामेटिक रूप से अपडेट किया जाता है और उपयोगकर्ता द्वारा भी अपडेट किया जा सकता है। मैं उन दो घटनाओं के बीच कैसे अंतर कर सकता हूं? जब उपयोगकर्ता टेक्स्ट बदलता है तो मैं "गंदा" ध्वज "सत्य" पर सेट करना चाहता हूं।सी # टेक्स्टबॉक्स इवेंट केवल उपयोगकर्ता इनपुट

+0

क्या आप [डेटा बाध्यकारी] हैं (http://msdn.microsoft.com/en-us/library/ms752347.aspx)? –

+0

इस नियंत्रण के लिए कोई डेटा बाध्यकारी नहीं है ... – kaycee

उत्तर

6

आप पाठ बॉक्स की कुंजी दबाने घटना का उपयोग कर सकते से पहले मूल्य को बचाने के लिए onFocus साथ संयोजन के रूप में यह काम कर सकते हैं।

 private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Insert the code you want to run when the text changes here! 
    } 
+0

यह घटना टेक्स्टबॉक्स के लिए मान्य है लेकिन मुझे आश्चर्य है कि न्यूमेरिकअपडाउन जैसे अन्य नियंत्रणों के बारे में क्या है ... – kaycee

+2

हाँ, यह समाधान सभी नियंत्रणों के लिए सबसे साफ नहीं है। हालांकि, न्यूमेरिकुपडाउन कंट्रोल में कीडाउन इवेंट और मूसडाउन इवेंट दोनों होते हैं। मुझे लगता है कि आप नियंत्रण के मूल्य की ट्रैकिंग के साथ दोनों का उपयोग कर सकते हैं। वैकल्पिक रूप से, जब भी आप प्रोग्रामिक रूप से मूल्य बदलते हैं, तो आप हमेशा एक बूलियन ध्वज फेंक सकते हैं, फिर नियंत्रण के लिए ValueChanged ईवेंट में बूलियन ध्वज की जांच करें (इसे अपनी प्रसंस्करण जारी रखने से पहले डिफ़ॉल्ट पर वापस सेट करें)। यह निश्चित रूप से एक बहुत ही सरल समाधान है - शायद सबसे सुंदर नहीं है। –

+1

यह उपयोगकर्ता काम नहीं करता है यदि उपयोगकर्ता माउस के साथ टेक्स्टबॉक्स में डेटा को काटता है और चिपकाता है। –

2

प्रोग्रामेटिक रूप से किए जाने पर "गंदा" झंडा सेट करने से बचें। ईवेंट हैंडलर अक्षम या एक ध्वज है कि कहते हैं सेट

+0

इनलाइन परिवर्तनों की अवधि के लिए ईवेंट हैंडलर को अक्षम करना एक अच्छा विचार है। यह बॉक्स में पाठ चिपकाने वाले उपयोगकर्ताओं द्वारा आपके पास होने वाली किसी भी समस्या का समाधान भी करता है। –

0

onBlur

इस पल उपयोगकर्ता क्षेत्र छोड़ देता है पकड़ेगा कोशिश "इस कोड, उपयोगकर्ता की नहीं"।

आप संपादन

+0

अच्छा विचार लेकिन 100% प्रभावी नहीं। मेरे उत्तर –

+0

की तुलना में थोड़ा "क्लीनर" होगा यदि यह काम नहीं करता है तो "स्वच्छता" व्यर्थ है। इस तरह की चीज के लिए बस हैंडलर को अलग करना काफी मानक है। –

+0

वह विकलांग हैंडलर के बारे में बात नहीं कर रहा है, लेकिन अतिरिक्त ध्वज के बारे में बात कर रहा है। खैर, यह एक अतिरिक्त ध्वज या अतिरिक्त हैंडलर है ... –

5

मेरी प्रकार के लिए समाधान काम, कॉपी और TextChanged घटना पर पाठ बॉक्स की

private void TextChanged(object sender, EventArgs e) 
    { 
     if (((TextBox)sender).ContainsFocus) 
     { 

     } 
    } 
+3

क्या होगा अगर नियंत्रण पर ध्यान केंद्रित किया गया हो, लेकिन पाठ को प्रोग्रामिक रूप से बदला जा रहा है? – Pedro

+0

नियंत्रण के संघ के लिए टेक्स्ट प्रबंधित प्रतिनिधि का उपयोग करें और प्रोग्रामेटिक रूप से बदलने के लिए अन्य का उपयोग करें – naderi

2

चेक संशोधित संपत्ति पेस्ट करें। यदि सही है, तो परिवर्तन उपयोगकर्ता द्वारा किए गए थे, अन्यथा पाठ को प्रोग्रामेटिक रूप से बदल दिया गया था।

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