सवाल मैं एक संपादन योग्य कॉम्बोबॉक्स से टेक्स्ट चेंज किए गए ईवेंट कैसे प्राप्त करूं?


मेरे पास एक संपादन योग्य कॉम्बोबॉक्स है:

<ComboBox IsEditable="true"/>

जब संपादित मूल्य बदल जाता है तो क्या घटना उत्पन्न होती है? मैंने TextInput की कोशिश की है लेकिन यह समाधान नहीं है।


44
2017-08-02 15:59


मूल


TextChanged ईवेंट आज़माएं और देखें कि यह काम करता है या नहीं। - Shamim Hafiz


जवाब:


<ComboBox IsEditable="True" TextBoxBase.TextChanged="ComboBox_TextChanged" />

... यह करना चाहिए। (मान लीजिए कि आप कुछ ऐसा चाहते हैं जो हर बार पाठ में बदलाव किया जाता है, बल्कि तब जब उपयोगकर्ता पाठ में प्रवेश करना समाप्त कर देता है। इस मामले में आपको एक और घटना की आवश्यकता होगी - शायद एक लॉस्टफोकस ईवेंट या कुछ?)

वैसे भी, उपर्युक्त XAML काम करता है कि, जब IsEditable सत्य पर सेट किया गया है, तो कॉम्बोबॉक्स पाठ को प्रदर्शित करने और संपादित करने के लिए टेक्स्टबॉक्स का उपयोग करता है। टेक्स्टबॉक्स का टेक्स्ट चेंजेड इवेंट ए है बुलबुल घटना - जिसका अर्थ है कि यह तत्व पेड़ के माध्यम से बुलबुला होगा ताकि हम इसे कॉम्बोबॉक्स पर ही संभाल सकें।

एकमात्र 'मुश्किल' बिट यह है कि कॉम्बोबॉक्स एक टेक्स्ट चेंजेड ईवेंट का पर्दाफाश नहीं करता है लेकिन आप अभी भी इसके लिए एक हैंडलर परिभाषित कर सकते हैं संलग्न घटना (इसलिए TextBoxBase.TextChanged वाक्यविन्यास)।

(संभवतः पूर्णता के लिए ध्यान देने योग्य है, कि अगर कॉम्बोबॉक्स में एक से अधिक टेक्स्टबॉक्स शामिल होते हैं तो जब भी उनमें से कोई भी अपना टेक्स्ट बदलता है तो हैंडलर को बुलाया जाएगा।)


101
2017-08-02 16:14



कंबोबॉक्स के संसाधनों में एक शैली क्यों जोड़ती है, जिसने लक्षित टेक्स्टबॉक्स का लक्ष्य रखा था और टेक्स्ट चेंज के लिए इवेंट सेटर एक ही चीज़ को पूरा नहीं किया था? यह मेरा पहला विचार था जब तक कि मैंने पाया कि यह काम नहीं करता है। आपका समाधान काम करता है, लेकिन सोच रहा था कि मेरा विकल्प क्यों नहीं था। - Mike G
@ माइक जी: अच्छा सवाल है। मुझे लगता है कि दृष्टिकोण काम करेगा, लेकिन केवल तभी जब टेक्स्टबॉक्स को एक और शैली लागू नहीं होती है। मुझे संदेह है कि कॉम्बोबॉक्स का नियंत्रण टेम्पलेट टेक्स्टबॉक्स पर एक शैली सेट करता है जो आपकी शैली को ओवरराइड कर रहा है। - IanR
मैंने यह देखने के लिए स्नूप में नहीं देखा है कि यह मामला है, लेकिन मुझे लगता है कि आप इस धारणा के साथ सही हैं कि कॉम्बोबॉक्स डिफ़ॉल्ट टेक्स्टबॉक्स शैली को ओवरराइड कर रहा है। मुझे कल्पना करनी होगी कि TextChanged को इसकी कार्यक्षमता के लिए कॉम्बोबॉक्स द्वारा आंतरिक रूप से उपयोग किया जाता है। मुझे लगता है कि आपका समाधान "अधिक सही / पूर्ण" है, इस तथ्य के कारण कि मेरा मानना ​​है कि यह संलग्न गुणों को इस तरीके से लेता है कि उन्हें उपयोग करने के लिए डिज़ाइन किया गया था। - Mike G
कोशिश करते समय मुझे मिलता है Failed to created a 'TextChanged' from the text 'ComboBox_TextChanged' भले ही मैं बदलूं ComboBox उचित के साथ x:Name मूल्य। - Jonathan Leech-Pepin


उपरोक्त दृष्टिकोण के आधार पर मैंने (एक्सएएमएल) जेनरेट कोड में एक नज़र डाली थी।

<ComboBox x:Name="myComboBox" IsEditable="True"/>

प्रारंभ करने के लिए निम्न कोड जोड़ें:

myComboBox.AddHandler(System.Windows.Controls.Primitives.TextBoxBase.TextChangedEvent, 
                      new System.Windows.Controls.TextChangedEventHandler(ComboBox_TextChanged));

यह मेरे लिए ठीक काम करता है, क्योंकि मुझे एक पुन: प्रयोज्य कॉम्बोबॉक्स (एसक्यूएल-सर्वर ड्रॉपडाउन सूची) की आवश्यकता होती है जो सभी व्यवहार को समाहित करता है।


16
2018-03-05 08:46



मैंने पाया है कि यह विशेष रूप से टेक्स्ट चेंजेड ईवेंट के लिए बहुत अच्छा काम करता है, लेकिन यह कॉम्बोबॉक्स के चयन चेंज किए गए ईवेंट और टेक्स्टबॉक्स के चयन चेंज किए गए ईवेंट के बीच अस्पष्टता के कारण चयन चयन घटना के साथ काम नहीं करता है। क्या उस विशिष्ट घटना के लिए कुछ ऐसा करना संभव है? - Bobby Byrnes