2012-11-14 12 views
5

मैं अपने डेस्कटॉप एप्लिकेशन को अधिकतम होने से रोकना चाहता हूं। , डबल क्लिक करके शीर्षक पट्टी पर, या कीबोर्ड पर Windows + ऊपर तीर पर क्लिक करके आदि

- - यह किसी भी तरह से अधिकतम चाहिए नहीं हो जाते हैं> मैं को निष्क्रिय दोनों MaximizeBox और MinimizeBox
-> मैं भी MaximumSize और MinimumSize मेरी WinForm के लिए निर्धारित

फिर भी जब मैं प्रेस विंडोज + ऊपर तीर, मेरी जीत प्रपत्र स्क्रीन के बाईं शीर्ष करने के लिए पाली, मेरा मतलब यह अधिकतम हो जाता है । तो कृपया मुझे इस बात को रोकने के लिए किसी भी तरह से बताएं ...विनफॉर्म को अधिकतम करने से रोकना?

+3

शॉर्टकट्स – emartel

+0

के बारे में आपके दूसरे प्रश्न के लिए एक और प्रश्न बनाने पर विचार करें मैंने यह भी किया है, और मैंने इसे सब Google पर पाया। कुछ गुण जिन्हें आपको गलत पर सेट करने की आवश्यकता है, कुछ आपको ओवरराइड करने की आवश्यकता है। – Pavenhimself

उत्तर

10

वास्तव में यहां काम पर दो पूरी तरह अलग मुद्दे हैं। अनुमोदित, वे मूल रूप से एक कार्यात्मक परिप्रेक्ष्य से समान दिखते हैं, लेकिन एक कार्यान्वयन-मॉडल परिप्रेक्ष्य से (जैसे विंडोज स्वयं स्वाभाविक रूप से उपयोग करेगा) वे असंबंधित हैं।

जैसा कि अन्य ने उत्तर दिया है, आप MaximizeBox संपत्ति को false पर सेट करके अपने फॉर्म को अधिकतम करने से रोक सकते हैं। यह फॉर्म की अंतर्निहित विंडो पर WS_MAXIMIZEBOX style हटा देता है, जो विंडो प्रबंधक को विंडो को अधिकतम करने की अनुमति देने से रोकता है। यह विंडो के कैप्शन बार (अधिकतम बॉक्स और बंद बॉक्स के बीच एक) पर अधिकतम बॉक्स को अक्षम करता है, विंडो/सिस्टम मेनू पर "अधिकतम" विकल्प अक्षम करता है, और एक खिड़की को अधिकतम करने के किसी भी अन्य तरीके को अक्षम करता है जिसे मैं भूल सकता हूं।

हालांकि, इस जीत + कीबोर्ड शॉर्टकट है, जो Aero Snap invokes एक ही जादू स्थिति में विंडो खींचकर स्क्रीन के किनारों बैठे हैं के रूप में कोई लेना देना नहीं है।खिड़की प्रबंधक, चाहे बग या एरो स्नैप की सुविधा के परिणामस्वरूप, आपको विंडोज़ को प्रभावी रूप से "अधिकतम" करने की अनुमति देता है जिसे अन्यथा अधिकतम नहीं किया जाना चाहिए। MaximizeBox संपत्ति को सेट करने से यह प्रभावित नहीं होता है, इसलिए यदि आप वास्तव में उपयोगकर्ता को विंडो के आकार को बदलने से रोकना चाहते हैं, तो आपको अपनी विंडो पर एरो स्नैप के प्रभाव को अक्षम करने की आवश्यकता होगी।

दुर्भाग्य से, प्रति विंडो या प्रति-प्रक्रिया के आधार पर एरो स्नैप को प्रोग्रामेटिक रूप से अक्षम करने की कोई विधि नहीं है (कम से कम, मेरे ज्ञान के लिए नहीं) (this related question भी देखें)। यदि उपयोगकर्ता एरो स्नैप सक्षम है, तो आप यह मान सकते हैं कि वे चाहते हैं कि व्यवहार और अनुप्रयोगों को इसके साथ छेड़छाड़ न हो। केवल एक चीज जो आप कर सकते हैं पूरी तरह से आपकी खिड़की का आकार बदलना अक्षम है। WinForms में, आप FormBorderStyle संपत्ति को निम्न में से किसी एक पर सेट करके करते हैं: FormBorderStyle.FixedSingle, FormBorderStyle.Fixed3D, या FormBorderStyle.FixedDialog। यदि आप अभी भी अपनी खिड़की को अन्य तरीकों से आकार देने योग्य बनाना चाहते हैं, तो आपको मैन्युअल रूप से इसे संभालने के लिए कोड लिखना होगा, जो विशेष रूप से आसान कार्य नहीं है।

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

+1

मैं इस तरह के उत्तर के लिए देख रहा था और अधिकतम करने के लिए MaximizeBox को अधिकतम करने के लिए किसी भी पथ को रोकने के लिए लगता है। मुझे लगता है कि यह अब इस जवाब के बीच तय किया गया था और इस उत्तर को पोस्ट कर रहा था। या किसी को याद किया था? – Karlovsky120

9

इस फ़ॉर्म में MaximizeBox नामक एक संपत्ति है - इसे गलत पर सेट करें।

अपने दूसरे प्रश्न के संबंध में, WinForms में कीबोर्ड शॉर्टकट को लागू करने के सर्वोत्तम तरीकों के लिए this question and it's answers देखें।

+1

MaximizeBox = झूठी किसी भी विंडो को अधिकतम करने के लिए विंडोज + ऊपर तीर शॉर्टकट को नहीं रोकेगा ... अगर मैं गलत नहीं हूं, तो मुझे अपने आवेदन में एक ही समस्या का सामना करना पड़ रहा है .... –

+0

आप हमेशा विंडोज + अप शॉर्टकट को अक्षम कर सकते हैं साथ ही, और फिर उपयोग करने के लिए उपलब्ध हर दूसरे कीबोर्ड शॉर्टकट बनाने पर ध्यान केंद्रित करें .. – lifetimes

+0

काम करने के लिए उपयुक्त है, लेकिन ऐसा नहीं है। इसे काम से छेड़छाड़ करना, https://stackoverflow.com/a/47994707/17034 –

1

"अधिकतम बॉक्स" नामक फॉर्म क्लास की एक संपत्ति है जिसे आपको अपने फॉर्म की प्रॉपर्टी विंडो में गलत सेट करना होगा ... यह वास्तव में फ़ॉर्म को किसी भी तरह से अधिकतम करने से अक्षम कर देगा ... अगर आप चाहें तो भी आपके प्रपत्र आकार को नियंत्रित करने के रूप में आप "MinimumSize, MaximumSize" अपने विवेक से उनके मूल्यों की स्थापना या MaximumSizeChanged और MinimumSizeChanged घटनाओं के लिए एक ईवेंट हैंडलर बनाने में इस तरह के गुणों के साथ काम कर सकते हैं ...

+0

यह बात दोस्त काम नहीं कर रही है .. खिड़की शीर्ष बाएं कोने में स्थानांतरित हो रही है जैसे कि आप 16-बिट डॉस को अधिकतम करने की कोशिश करते हैं आपके 32-बिट विंडोज ओएस पर आवेदन ... यह सिर्फ ऊपरी बाएं कोने में जाता है और फिर किसी भी विंडो को अधिकतम करता है, जैसे कि जब आप किसी भी विंडो को अधिकतम करते हैं ... मेरा मतलब है कि आकार वही रहता है लेकिन अन्य सभी गुण समान हैं जैसे कि जब कोई सामान्य विंडो अधिकतम हो जाती है .. क्या इस समस्या को हल करने का कोई तरीका है ... ?? –

3
this.FormBorderStyle = FormBorderStyle.FixedSingle; 

कोड का यह लाइन पाएगा विंडो को फिर से आकार देने से उपयोगकर्ता।

इसके अलावा आप अधिकतम बॉक्स को छुपाएं/अक्षम करें और जो आपने पूछा है उसे करना चाहिए।

अक्षम करने के लिए अधिकतम बॉक्स इस

this.MaximizeBox = false; 

का उपयोग छुपाने के लिए अधिकतम बॉक्स

this.MinimizeBox = false; 

अधिकतम तो इस का उपयोग के साथ-साथ और कम से कम झूठी बटन गायब हो जाने की तैयारी में हैं।

+0

बडी यह करेगी लेकिन मेरे पास FormBorderStyle = FormBorderStyle.None के साथ एक कस्टम फॉर्म है। क्या ऐसा करने का कोई और तरीका है ... –

+0

आप खिड़की को अधिकतम करने के लिए 'WINKEY + UP' संयोजन दबा सकते हैं। इसके अलावा मैं अधिकतम/न्यूनतम आकार को निश्चित मान पर सेट कर दूंगा।यह समाधान बहुत गंदा लगता है, लेकिन यदि आपकी आवश्यकता 'FormBorderStyle.None'-विकल्प है, तो शायद यह आपका सबसे अच्छा शॉट है। –

1

आकार (या कुछ आकार) के बराबर अधिकतम आकार सेट करना कम से कम विंडोज़ को पूर्ण-स्क्रीन पर जाने से रोकता है। यह अभी भी ऊपरी बाएं कोने में स्नैप करता है लेकिन यह अभी भी कम से कम एक खिड़की है और सही दिखता है - जैसे कि यह आपके प्रोग्राम की बजाय विंडोज बेवकूफ है। फार्म की चाल स्पर्धा में

private void toolbox_Move(object sender, EventArgs e) 
{ 
    this.WindowState = FormWindowState.Normal; 
} 

:

2

आप निर्धारित करके खिड़कियों ऊपरी बाएँ कोने से झपटते रोका जा सकता है।

1

यदि आप अपनी विंडो या एप्लिकेशन सक्रिय हैं और निष्क्रिय होने पर इस हॉट कुंजी को अपंजीकृत करते हैं तो आप रजिस्टर करने की कोशिश कर सकते हैं। आपको हॉटकी पकड़नी होगी और आगे की प्रक्रिया को रोकने के लिए उचित मूल्य वापस करना होगा।

WM_ACTIVATEAPP, WM_ACTIVATE और WM_NCACTIVATE पर देखें। यदि आप अपने सभी विंडोज़ के लिए विन + यूपी को अक्षम करना चाहते हैं तो पहले इस्तेमाल किया जा सकता है।

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