2008-09-22 13 views
21

मैं विंडोज विस्टा और सी # नेट 3.5 का उपयोग कर रहा हूं, लेकिन मेरे दोस्त ने XP पर प्रोग्राम चलाया था और एक ही समस्या है।सी # - एक पूर्णस्क्रीन Winform ऐप क्यों नहीं होगा हमेशा टास्कबार को कवर?

तो मैं एक सी # प्रोग्राम है जो मैं SystemTray में एक आइकन के साथ पृष्ठभूमि में चल रहा है है। मेरे पास निम्न स्तर की कीबोर्ड हुक है इसलिए जब मैं दो कुंजियां दबाता हूं (इस मामले में सीआरटी + विंडोज़) तो यह एप्लिकेशन के मुख्य रूप को खींच लेगा। फॉर्म कॉम्बो कुंजी प्रेस में भी पूर्ण स्क्रीन होने के लिए सेट है:

this.FormBorderStyle = FormBorderStyle.None; 
this.WindowState = FormWindowState.Maximized; 

तो यह मूल रूप से काम करता है। जब मैं सीटीआर + विंडोज हिट करता हूं तो यह फॉर्म लाता है, इससे कोई फर्क नहीं पड़ता कि मैंने किस कार्यक्रम पर ध्यान केंद्रित किया है। लेकिन कभी-कभी, टास्कबार अभी भी फॉर्म पर दिखाई देगा, जो मैं नहीं चाहता हूं। जब मैं उस कुंजी कॉम्बो को दबाता हूं तो मैं हमेशा पूर्ण स्क्रीन बनना चाहता हूं।

मैं समझ यह क्या आवेदन मूल रूप से ध्यान केंद्रित किया गया है के साथ क्या करने के लिए कुछ नहीं है। लेकिन जब भी मैं अपने मुख्य रूप पर क्लिक करता हूं, तब भी टास्कबार कभी-कभी वहां रहता है। तो मुझे आश्चर्य है कि वास्तव में समस्या वास्तव में समस्या है। ऐसा लगता है कि कभी-कभी टास्कबार जिद्दी हो रहा है और मेरे कार्यक्रम के पीछे बैठना नहीं चाहता।

किसी के पास कोई विचार है कि मैं इसे कैसे ठीक कर सकता हूं?

संपादित करें: अधिक जानकारी- मैं उसी प्रभाव को प्राप्त करने की कोशिश कर रहा हूं कि जब आप इसे पूर्णस्क्रीन मोड में डालते हैं, या जब आप प्रस्तुति मोड में पावरपॉइंट डालते हैं।

एक खिड़कियों में आप कर के रूप में है कि किसी से बॉर्डर शैली डालने और विंडो को विस्तृत द्वारा। लेकिन कभी-कभी विंडो किसी कारण से टास्कबार को कवर नहीं करेगी। आधे समय यह होगा।

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

उत्तर

18

इस प्रयास करें (जहां this अपने रूप है):

this.Bounds = Screen.PrimaryScreen.Bounds; 
this.TopMost = true; 

कि सेट करेंगे फुलस्क्रीन के लिए फॉर्म, और यह टास्कबार को कवर करेगा।

+1

इसके लिए काम करने के लिए, आप यह सुनिश्चित करना चाहते हैं कि फ़ॉर्म * अधिकतम * अधिकतम नहीं है। –

+0

ओह, एकमात्र समस्या यह है कि मैं इसे टॉपमोस्ट नहीं कर सकता, क्योंकि मेरे पास अन्य विंडो हैं जो टॉपोस्ट हैं, और इसलिए यदि मैं 'इस' पर क्लिक करता हूं तो अन्य सभी विंडोज़ इसके पीछे चले जाएंगी। – Joel

+2

हे। वहां मामूली जानकारी है। मुझे इस बारे में संदेह है कि आप क्या चाहते हैं * बिना * टॉपोस्ट के यदि उपयोगकर्ता को "अन्य विंडो के शीर्ष पर टास्कबार रखें" चेक किया गया है। लेकिन आपके पास एकाधिक टॉपमोस्ट विंडो भी हो सकती हैं, और सक्रिय एक होगा, ओह, टॉपमोस्टेस्ट। –

0

जहाँ तक मुझे पता है, कार्य पट्टी या तो ऊपर या "अन्य विंडो के शीर्ष पर टास्कबार रखें" सेटिंग के आधार पर खिड़कियों के नीचे है। (कम से कम, यह XP में शब्द है।) मुझे लगता है कि आप यह देखने का प्रयास कर सकते हैं कि क्या आप इस सेटिंग का पता लगा सकते हैं और आवश्यकता होने पर इसे टॉगल कर सकते हैं?

+4

आपकी वरीयताओं के आधार पर उपयोगकर्ता की चुनी गई सेटिंग्स को बदलने का बुरा अभ्यास है।सही तरीके से इच्छित व्यवहार प्राप्त करने के लिए एपीआई का उपयोग कैसे करना है, यह जानना बेहतर है। – Wedge

+0

यह सेटिंग केवल विंडो वाले ऐप्स पर लागू होती है, पूर्ण स्क्रीन ऐप्स नहीं। क्योंकि जब मैं गेम खेलता हूं या अपना वेब ब्राउजर पूर्ण स्क्रीन पर डालता हूं तो यह टास्क बार को कवर करेगा। – Joel

+0

गेम जैसे पूर्ण स्क्रीन ऐप्स डिस्प्ले मोड को डायरेक्टएक्स या ओपनजीएल या विंडोिंग सिस्टम के बाहर पूरी तरह से कुछ और स्विच कर रहे हैं, जो प्रोग्राम को कच्चे वीडियो बफर एक्सेस देता है। यह खिड़की प्रणाली के भीतर से है, इसलिए मैंने जिस सेटिंग का उल्लेख किया है वह लागू होता है। – jdmichal

0

कोशिश रूप आकार बदलने और इतने तरह ज़ेड-ऑर्डर के सामने करने के लिए इसे लाने:

 Rectangle screenRect = Screen.GetBounds(this); 
     this.Location = screenRect.Location; 
     this.Size = screenRect.Size; 
     this.BringToFront(); 
1
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F11) 
     if (FormBorderStyle == FormBorderStyle.None) 
     { 
      FormBorderStyle = FormBorderStyle.Sizable; 
      WindowState = FormWindowState.Normal; 
     } 
     else 
     { 
      SuspendLayout(); 
      FormBorderStyle = FormBorderStyle.None; 
      WindowState = FormWindowState.Maximized; 
      ResumeLayout(); 
     } 
} 
2

मैं इतने सारे समाधान की कोशिश की है, उनमें से कुछ Windows XP पर काम करता है और उन सभी को विंडोज 7 पर काम नहीं किया सब मैं ऐसा करने के लिए एक सरल विधि लिखने के बाद।

private void GoFullscreen(bool fullscreen) 
    { 
     if (fullscreen) 
     { 
      this.WindowState = FormWindowState.Normal; 
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
      this.Bounds = Screen.PrimaryScreen.Bounds; 
     } 
     else 
     { 
      this.WindowState = FormWindowState.Maximized; 
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
     } 
    } 

कोड का क्रम महत्वपूर्ण है और यदि आप WindwosState और FormBorderStyle की जगह बदलने के काम नहीं करेगा।

इस विधि का लाभ यह है कि झूठी अन्य रूपों मुख्य रूप से अधिक आने की अनुमति पर सर्वोच्च जा रहा है।

यह मेरी समस्या को हल करता है।

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