2009-12-08 11 views
7

क्या कोई यह जानता है कि "x" बटन द्वारा wpf विंडो बंद कर दी गई है या नहीं?कैसे पता चलेगा कि विंडो "x" बटन से बंद थी या नहीं?

+0

क्या आप स्पष्टीकरण दे सकते हैं? क्या आप "एक्स" बटन दबाकर और विंडो बंद करने के अन्य साधनों (यानी कीबोर्ड) के बीच अंतर करना चाहते हैं? या खिड़की बंद करने के किसी भी साधन? –

+0

"एक्स" बटन दबाकर और खिड़की को बंद करने के अन्य माध्यमों (यानी कीबोर्ड) – Vytas999

+1

के बीच अंतर करें, मुझे लगता है कि यह उपयोगी होगा यदि आप समझाते हैं कि आप ऐसा क्यों करना चाहते हैं। उपयोगकर्ता को, इससे कोई फर्क नहीं पड़ता कि यह एक्स या मेनू आइटम द्वारा बंद है या नहीं। हो सकता है कि हम आपको वह करने में मदद कर सकें जो आप वास्तव में करना चाहते हैं –

उत्तर

11

सबसे आसान तरीका (मेरी राय में) एक बूलियन स्टोर करना है जो इंगित करता है कि उपयोगकर्ता ने किसी अन्य विधि के माध्यम से फ़ॉर्म बंद कर दिया है या नहीं।

फिर ऑनक्लोजिंग ईवेंट में, यह देखने के लिए एक जांच करें कि बूलियन गलत है (यह दर्शाता है कि एक्स बटन क्लिक किया गया था)।

इस के साथ एकमात्र मुद्दा यह तथ्य है कि आपने स्वयं को बूलियन सेट किया है। गीलेर यह संभव है कि उपयोगकर्ता आपके फॉर्म को बंद कर सकें।

संपादित करें: मुझे यह इंगित करना चाहिए कि फ़ॉर्म को बंद करने के अन्य तरीकों पर यह अत्यधिक निर्भर है। यदि आपके पास Window.Close() को कॉल करके इस विंडो को बंद करने वाली कई विधियां हैं, तो मैं UserClose() नामक एक विधि बनाने पर विचार करूंगा, जो आपके लिए बूलियन सेटिंग करता है।

public void UserClose() 
{ 
    NonXClose = true; 
    this.Close(); 
} 

यह बाहरी कोड को बुलियन की सेटिंग के साथ विंडो को बंद करने की अनुमति देगा।

Window.Close() का कारण बनता है WM_CLOSE खिड़की को भेजने जा रहे हैं:

3

अंतर निम्नलिखित है।

Alt + F4 और X बटन SC_CLOSE प्रकार के साथ WM_SYSCOMMAND संदेश का कारण बनता है। आप यह तय कर सकते हैं कि क्या आप इस संदेश को आगे बढ़ाना चाहते हैं (और अंत में WM_CLOSE का कारण बनें)।

Look for my answer with code example here

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