मेरे पास इस समस्या का एक संस्करण था जो तब होगा जब मैंने एक कस्टम नियंत्रण से myDialog.ShowDialog() को कॉल किया था जब उपयोगकर्ता एक पंक्ति टेक्स्ट बॉक्स से प्रवेश करता था।
(वे एक पाठ बॉक्स में एक उत्पाद संख्या में डाला, दर्ज मारा, और संवाद पॉप और उन्हें उपलब्ध आकारों में से चुन सकते हैं। लेकिन यह रात का खाना कष्टप्रद है एक घंटी ध्वनि हर बार संवाद पॉप निभाता है।)
मैंने टेक्स्ट बॉक्स में कुंजी डाउन इवेंट फंस लिया, और e.Handled और e.SupressKeypress सेट किया, लेकिन इससे समस्या हल नहीं हुई। तब मैंने देखा कि अगर मैंने myDialog.ShowDialog() को कॉल पर टिप्पणी की, तो मुझे ध्वनि नहीं मिला, जैसा कि अजीब है। उस मामले में, ई। हैंडल और e.SupressKeypress घंटी को रोक दिया था।
मैंने सोचा कि शायद यह घटना किसी भी तरह से संवाद पर जा रही थी, इसलिए मैंने फॉर्म स्तर पर और मुख्य रूप से कीस्ट्रोक लेते हुए फॉर्म के हर तत्व पर फंस गया, और ई। हैंडल और ई। सप्रेसप्रेस उनमें से हर एक में, लेकिन यह ठीक नहीं किया।
मैंने फ़ॉर्म पर सबमिट बटन डालने और उस बटन पर फॉर्म की AcceptButton प्रॉपर्टी सेट करने का प्रयास किया, लेकिन इससे कोई मदद नहीं मिली।
मैंने myDialog.ShowDialog() को कॉल करने से पहले एप्लिकेशन.डोइवेंट्स() को कॉल करने का प्रयास किया, लेकिन इससे इसे ठीक नहीं किया गया।
मैंने देखा है कि फोन करने Application.DoEvents() घंटी यहाँ तक कि जब myDialog.ShowDialog करने के लिए कॉल() बाहर टिप्पणी की गयी है खेलने के लिए की वजह से! जैसे कि डूवेन्ट्स को कॉल करना वर्तमान घटना को ई। हैंडल और ई। सुपर्रेसकेप्रेस क्वालीफायर पर ध्यान दिए बिना संसाधित कर रहा था।
तो .. मैंने सोचा कि क्या हुआ अगर मैं वर्तमान घटना बाहर खेलने जबकि क्वालीफायर खेलने में हैं, और उसके बाद कि बाद मेरे संवाद बढ़ा?
तो मैं एक BeginInvoke अनुभाग में myDialog.ShowDialog() डाल (के बाद से मेरी धारणा है कि एक आह्वान मुख्य संदेश कतार है कि जब उस संदेश संसाधित किया जाता है विधि कहा जाता है करने के लिए कारण बनता है में एक संदेश कहते है):
BeginInvoke((MethodInvoker)delegate {
SelectProduct(); // <-- pops the size selection dialog
});
विश्वास करो या नहीं, यह तय है - कोई घंटी नहीं।
(जब मैं जब एक पृष्ठभूमि धागा एक कॉलबैक कॉल दृश्य को अपडेट करने की जरूरत है मैं आमतौर पर आह्वान उपयोग करते हैं, के बाद से WinForms विचारों से खुद को मुख्य थ्रेड के अलावा किसी अन्य धागे से अद्यतन करने की अनुमति नहीं देते।)
तो मैं कस्टम नियंत्रण का अनुमान लगा रहा हूं, जहां सिंगल लाइन टेक्स्ट बॉक्स है, जहां एक स्वीकृति बटन की आवश्यकता है - लेकिन कस्टम कंट्रोल में AcceptButton प्रॉपर्टी नहीं है।
WinForms प्रोग्रामिंग एक काला कला का थोड़ा सा प्रतीत होता है। मुझे लगता है कि हर तरह के प्रोग्रामिंग की तरह, मुझे लगता है।
अब मैं डिंग को समझते हैं। और मैंने इसे चेक किया। मल्टीलाइन = झूठी के साथ: अगर मैं इस बटन को फॉर्म स्वीटबटन में सेट करता हूं, तो यह तुरंत सक्रिय हो जाता है। तो कोई डिंग नहीं है, लेकिन मेरे पास कई अन्य बटन हैं और यह मेरा स्वीकार्य बटन नहीं है। यदि मैं मल्टीलाइन = सत्य सेट करता हूं तो डिंग भी चला जाता है। यही वह है जिसे मैंने प्राथमिकता दी, इसके अलावा वर्डवाप = झूठी। सहायता के लिए धन्यवाद। – ibram