एक और हाय सब घटना,एक्सेल स्वचालन बंद लापता
मैं सी # में Interop के माध्यम से एक्सेल स्वचालन कर रहा हूँ, और मैं जब किसी कार्यपुस्तिका बंद कर दिया है सूचित करना चाहते हैं। हालांकि, कार्यपुस्तिका पर कोई बंद घटना नहीं है और न ही एप्लिकेशन पर एक छोड़ घटना है।
कोई भी व्यक्ति उस से पहले किया गया है? मैं कोड का एक टुकड़ा जो कार्यपुस्तिका बंद किया जा रहा के प्रति प्रतिक्रिया करता है (यदि कार्यपुस्तिका वास्तव में बंद कर दिया है जो केवल निष्पादित किया जाता है) कैसे लिख सकता है? आदर्श रूप में है कि के बाद होना चाहिए कार्यपुस्तिका को बंद करने, इसलिए मैं सभी परिवर्तनों को प्रतिबिंबित करने के लिए फ़ाइल पर भरोसा कर सकते हैं।
मैं अब तक क्या मिला के बारे में विवरण:
एक BeforeClose() घटना नहीं है, लेकिन अगर कोई बिना सहेजे गए परिवर्तन हैं इस घटना से पहले उपयोगकर्ता कहा जा रहा है, उन्हें बचाने के लिए है कि क्या उठाया है पल मैं कर सकते हैं पर ऐसा घटना को संसाधित करें, मेरे पास अंतिम फ़ाइल नहीं है और मैं COM ऑब्जेक्ट्स को रिलीज़ नहीं कर सकता, दोनों चीजें जिन्हें मुझे करने की ज़रूरत है। मुझे यह भी पता नहीं है कि कार्यपुस्तिका वास्तव में बंद हो जाएगी, क्योंकि उपयोगकर्ता बंद करने का विकल्प चुन सकता है।
तो फिर वहाँ एक BeforeSave() घटना है। तो, उपयोगकर्ता चुनता है "हाँ" बिना सहेजे गए परिवर्तन को बचाने के लिए है, तो BeforeSave() BeforeClose के बाद निष्पादित किया जाता है()। हालांकि, यदि उपयोगकर्ता "निरस्त" चुनता है, तो "फ़ाइल-> सेव" हिट करता है, ईवेंट के सटीक उसी क्रम को निष्पादित किया जाता है। इसके अलावा, यदि उपयोगकर्ता "नहीं" चुनता है, तो पहले सेव() को निष्पादित नहीं किया जाता है। वही तब तक रहता है जब तक उपयोगकर्ता इन विकल्पों में से किसी एक पर क्लिक नहीं करता है।
हाय नेल्सन - हाँ, मैंने पहले से ही इसे कवर किया है। समस्या यह है कि "और पहले सेव() नहीं है" आपके प्रस्ताव का हिस्सा semidecidable है। अगर इसे नहीं कहा जाता है, तो मैं इंतजार कर सकता हूं लेकिन यह तय नहीं करता कि इसका मतलब है कि वह निरस्त हो गया है, उसने कोई नहीं चुना है, या उसने अभी तक किसी भी बटन पर क्लिक नहीं किया है। – chiccodoro