2009-09-03 9 views
13

मैं विजुअल स्टूडियो 2008 आईडीई में संपादक विंडो (टैब) को बंद करने वाली घटनाओं को कैप्चर करना चाहता हूं। जब मैं dte2.Application.Events.get_CommandEvents (शून्य, 0) .BeforeExecute मैं सफलतापूर्वक कब्जा कर लिया इस तरह की घटनाओं का उपयोग करें:विंडो बंद करें घटना

  • File.Close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow और अन्य।

यदि विंडो में कोड स्वीकार्य नहीं है, तो मैं ईवेंट (CancelDefault = true) को रोकता हूं।

लेकिन अगर मैं दाईं ओर "एक्स" बटन पर क्लिक करता हूं, तो "परिवर्तन सहेजें"; संवाद प्रकट होता है, संपादक विंडो के साथ टैब बंद है और मेरे पास कोई कैप्चर नहीं किया गया है। इस मामले में मैं विंडोक्लोसिंग इवेंट, पर कब्जा कर सकता हूं लेकिन ईवेंट को रद्द नहीं कर सकता।

क्या यह "एक्स" बटन को संभालने और ईवेंट को रोकने के लिए पोषित है?

+0

यदि आप "एक्स" पर क्लिक करते हैं, लेकिन "परिवर्तन सहेजें" दिखाई नहीं देगा, तो क्या समस्या अभी भी होती है? –

+0

क्या कोई कारण है कि आप सत्यापन नहीं कर रहे हैं और जैसे "परिवर्तन सहेजें" संवाद विधियों में? आम तौर पर, किसी के पास विंडो-क्लोज़ ईवेंट परिवर्तनों की जांच करेगा और "परिवर्तन सहेजें" प्रॉम्प्ट शुरू करेगा। "परिवर्तन सहेजें" विधि तब सही हो जाएगी जब सत्यापन अच्छा था और सहेजना सफल रहा था, या वैधता विफल होने पर गलत ... फिर वह मान विंडो-क्लोज़ इवेंट हैंडलर पर वापस भेजा जाएगा, आगे बढ़ने और बंद करने के लिए सही खिड़की या झूठी इसे अस्वीकार करने और कुछ भी करने के लिए नहीं। – ewall

उत्तर

0

आप कुछ Windows API कोड आप WM_CLOSE, WM_QUIT और WM_DESTROY रोकना SetWindowsHookEx समारोह का उपयोग कर एक हुक स्थापित करने के लिए सक्षम हो सकता है का उपयोग करने को तैयार हैं।

1

सी # में यह कुछ इस तरह होगा: आप ईवेंट हैंडलर समापन जोड़ने और फिर

void MyWindow_Closing(object sender, CancelEventArgs e) 
     { 
      if(something) 
       e.Cancel = true; //<- thats the magic part you want 
} 
0

मेरा सुझाव है, एमडीआई बाल खिड़की घटनाओं से निपटने की तर्ज पर जाँच !!

जिस संपादक टैब का आप उल्लेख कर रहे हैं वह मूल रूप से एमडीआई चाइल्ड विंडो का एक उदाहरण है।

आशा है कि इससे मदद मिलती है!