2010-05-06 2 views
5

मेरे पास यह विंडोज फॉर्म एप्लिकेशन है जहां यह अधिसूचना क्षेत्र में बैठता है। आइकन पर क्लिक करने से इसे आगे लाया जाता है, इसे फिर से क्लिक किया जाता है (या ऐप एक्स आइकन पर क्लिक करके) इसे वापस भेजता है। यह ऐप का प्रकार है कि आइकन पर क्लिक करके प्रदर्शित होने पर विंडो हमेशा शीर्ष पर होती है (हालांकि यह वैकल्पिक है)।विंडोज फॉर्म में टॉपमोस्ट प्रॉपर्टी के साथ वास्तव में कष्टप्रद बग

राइट-क्लिक करके आइकन एक संदर्भ मेनू, जहां एक "हमेशा शीर्ष पर" विकल्प है या नहीं सक्षम करने के लिए चुन सकते हैं को लाता है। जब एप्लिकेशन पहली बार शुरू होता है, तो ऐप सेटिंग्स को XML फ़ाइल से पढ़ा जाता है और मैं 99% हूं कि यह काम कर रहा है, TopMost संपत्ति ठीक से पढ़ी जाती है (और लिखित)।

कुछ समय के बाद (मिनट, घंटे, दिन, जो कुछ भी है, मैं सामान्य रूप से हाइबरनेट और शायद ही कभी बंद) TopMostबंद हो जाता है काम कर। मैं विकल्प नहीं बदलता, मुझे नहीं लगता कि कुछ भी विकल्प मूल्य बदल रहा है लेकिन मैं अधिसूचना क्षेत्र आइकन पर क्लिक करता हूं और ऐप सामने नहीं लाया जाता है। यह दिखाता है लेकिन यह पृष्ठभूमि पर है (यह Alt + Tab पर प्रदर्शित होता है), यह "हमेशा शीर्ष पर" जैसा नहीं होना चाहिए। मैं संदर्भ मेनू लाता हूं, विकल्प अक्षम करता हूं (क्योंकि यह सक्षम है) और इसे वापस सक्षम करें और उसके बाद काम करना शुरू हो जाता है। ऐप अब "हमेशा शीर्ष पर है"। हालांकि, यह थोड़ी देर के बाद कभी भी इस क्षमता को खो सकता है।

मुझे समझ में नहीं आ रहा है कि ऐसा क्यों होता है और यह कैसे होता है। क्या किसी को कोई विचार है क्यों? यदि नहीं, तो कोई विचार है कि मैं इस तरह के व्यवहार को डीबग करने का प्रयास कैसे कर सकता हूं?

संपादित करें:
मैं एक संदेशबॉक्स दिखाने के लिए जब TopMost संपत्ति अगर मैं किसी भी अजीब व्यवहार नोटिस सकता है, लेकिन यह अच्छा नहीं था देखने के लिए बदल गया था कोड का एक टुकड़ा गयी। यह मदद नहीं की क्योंकि प्रपत्र TopMost = true के साथ था, लेकिन यह अभी भी पृष्ठभूमि में था ...

उत्तर

5

सिर्फ एक "Topmost" खिड़की से अधिक है। सबसे ऊपर बस "सभी गैर-शीर्ष खिड़कियों से पहले" कहता है।

मुझे यकीन है कि डेस्कटॉप का पुनर्मूल्यांकन (जैसे हाइबरनेटिंग) को SetWindowPos(hwnd, HWND_TOPMOST, ...) (जो अंतर्निहित Win32 API कॉल है) की आवश्यकता है।

एक कामकाज के रूप में, आप खिड़की दिखाते समय फिर से संपत्ति को रीसेट और सेट कर सकते हैं।

एक और संभावना है कि खिड़की छुपा भी जेड क्रम बदल जाता है - या तो implicitely कैसे Win32 लागू करता है कि, या जिस तरह से WinForms छिपाने/शो विंडो फोन में स्पष्ट रूप।

+0

मुझे पता है कि मेरा ऐप्स केवल सर्वोच्च खिड़की नहीं है, लेकिन विंडोज एक्सप्लोरर, फायरफॉक्स और तरह बातें ऐसी नहीं सर्वोच्च और मेरी खिड़की उन के शीर्ष पर होना चाहिए। जो इस गड़बड़ी के कारण नहीं हो रहा है। मैं विकल्प को अक्षम और पुन: सक्षम करता हूं और यह उन पर सबसे ऊपर हो जाता है जैसा इसे करना चाहिए। –

+0

और मुझे नहीं लगता कि हाइबरनेट समस्या है। मैंने अभी एक त्वरित परीक्षण किया और एक्सप्लोरर और फ़ायरफ़ॉक्स के साथ मशीन को हाइबरनेट किया। इसे बहाल करने के बाद, मेरा ऐप अभी भी सबसे ऊपर है।यह एक अलग स्थिति पर होना चाहिए ... –

+0

क्या आपने सुझाए गए कामकाज का प्रयास किया था? (विंडो दिखाने के बाद, रीसेट करें और "सबसे ऊपर" संपत्ति सेट करें) – peterchen

1

पीटर पीटर की तरह मुझे भी कोई कारण नहीं है कि मूल कारण कैसे प्राप्त करें। लेकिन इसे थोड़ा सा आसान क्यों नहीं बनाते?

आप अपने आइकन पर क्लिक करें जब आप अपने विंडो दिखाने के लिए और भरोसा है कि सर्वोच्च अभी भी सक्रिय है जाएगा। विंडो दिखाने से पहले वर्तमान सेटिंग के साथ SetWindowPos() पर कॉल क्यों न करें। इससे कोई प्रदर्शन समस्या नहीं होनी चाहिए (केवल तब होता है जब उपयोगकर्ता आइकन पर क्लिक करता है) और न ही कोई अन्य दुष्प्रभाव।

मुझे पता है, यह मूल कारण पता लगाने के लिए बहुत अच्छा होगा, लेकिन शायद इसके लायक है अगर आप इसे इस तरह के एक छोटे से वैकल्पिक हल के साथ हल कर सकते हैं नहीं है।

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