2011-09-04 23 views
98

मैं एक मॉडल संवाद है, और बंद करें (X) बटन को छिपाने के लिए की जरूरत है, लेकिन मैं ControlBox = false उपयोग नहीं कर सकते, क्योंकि मैं कम से कम और अधिकतम बटन रखने की जरूरत है।विंडोज फॉर्म: बंद करें (एक्स) बटन कैसे छिपाना है?

मैं सिर्फ बंद करें बटन को छिपाने के लिए की जरूरत है, वहाँ है कि करने के लिए कोई तरीका है?

बहुत बहुत धन्यवाद!

अद्यतन: मैं जो सरल है :) धन्यवाद सब उसे निष्क्रिय करने की अनुमति थी!

+0

आप गलत हैं, मैं अक्षम बटन नहीं करना चाहती आप सेट कर सकते हैं

this.FormBorderStyle = FormBorderStyle.None; 

तो कम करने और अधिकतम बटन को पुन: एक विकल्प है, लेकिन छुपाएं यह .. क्या आप समाधान ढूंढने में सक्षम हैं? –

+8

आवश्यकता एक मजबूत शब्द है। यह आवश्यकता कहां से आ रही है?वास्तविक आवश्यकता क्या है - कि उपयोगकर्ता प्रोग्राम को समाप्त नहीं कर सकता है, या यूआई "ऐसा लगता है कि इसमें बंद बटन नहीं है"? क्योंकि इसके चारों ओर अन्य तरीके हैं, और आप उन सभी को पूरी तरह से बंद करने के लिए कड़ी दबाए जा रहे हैं (जैसे कार्य प्रबंधक, कार्यकुशल, संभवतः alt + f4, आदि)। मैं व्यक्तिगत रूप से इस पर बहुत मेहनत नहीं करूँगा, क्योंकि जब तक कि आप अपने पूरे ऐप को फिर से स्किन नहीं कर रहे हैं, यह प्रयास बर्बाद हो जाएगा, और अन्य विंडोज प्रोग्राम के साथ उपयोगकर्ता अपेक्षाओं/निरंतरता को तोड़ देगा। –

+4

@ सैम यह इस पृष्ठ को प्रकट करता है, इसलिए इस तरह के आलोचक मत बनो। –

उत्तर

110

आप इसे छुपा नहीं सकते, लेकिन आप फार्म की CreateParams संपत्ति अधिभावी द्वारा अक्षम कर सकते हैं।

private const int CP_NOCLOSE_BUTTON = 0x200; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams myCp = base.CreateParams; 
     myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ; 
     return myCp; 
    } 
} 

स्रोत: http://www.codeproject.com/KB/cs/DisableClose.aspx

+0

धन्यवाद, मुझे यह समाधान मिला, लेकिन हम इसे छिपाना चाहते हैं, न केवल अक्षम करें :(anywat धन्यवाद! –

+3

आपके फॉर्म को स्क्रैच से डिज़ाइन करने के अलावा कोई दूसरा तरीका नहीं है। –

+0

हाँ। बेहतर तरीके से अपना स्वयं का फॉर्म बनाएं बंद बटन के बिना कंट्रोलबॉक्स फिर पैरेंट फॉर्म के कंट्रोल बॉक्स को छुपाएं। – Bahamut

25

ठीक है, आप इसे छिपा कर सकते हैं, पूरे सिस्टम मेनू को हटाने के द्वारा:

private const int WS_SYSMENU = 0x80000; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style &= ~WS_SYSMENU; 
     return cp; 
    } 
} 
बेशक

, ऐसा करने से कम से कम और बटन को अधिकतम हटाता है।

आप सिस्टम मेनू रखें लेकिन करीब आइटम तो हटाने बंद करें बटन अवशेष लेकिन अक्षम है।

अंतिम विकल्प गैर-क्लाइंट क्षेत्र को स्वयं पेंट करना है। सही पाने के लिए यह बहुत मुश्किल है।

+1

यह भी काम करता है, gr खाना खा लो! लेकिन * ControlBox = false * आपके तरीके के रूप में उपयोग करना आसान है। – simmeone

+0

यह 'कंट्रोलबॉक्स' को गलत पर सेट करने जैसा ही है। इसके अलावा, यह आवश्यकता को विफल करता है: _ मुझे न्यूनतम और अधिकतम रखने की आवश्यकता है बटन_ – whiteshooz

7

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

ज्यादातर मामलों में, "करीबी" बटन उपलब्ध नहीं होने पर उचित ठहराना मुश्किल है, खासकर जब आप कम से कम क्षमताओं के साथ एक मोडल फॉर्म चाहते हैं। एक मोडल फॉर्म को कम करना वास्तव में कोई समझ नहीं आता है।

106

हम this.ControlBox=false;

+23

क्या आपने वह प्रश्न पढ़ा था जहां उसने निर्दिष्ट किया था कि यह विकल्प नहीं था? – Servy

+21

क्या Google खोज और यह एसओ क्यूए शीर्ष हिट था। और यह जवाब वह था जो मैं ढूंढ रहा था। अभिषेक धन्यवाद ... –

+11

जो उन सभी आकार देने वाले बटन छुपाता है। न केवल एक्स –

1

की स्थापना अपने प्रपत्र के गुण में से प्रपत्र पर बंद करें बटन को छुपा सकते हैं सेट 'कंट्रोल बॉक्स' = झूठी लेकिन यह छोटा छिपाने के लिए और साथ ही बढ़ा सकते हैं।

2

वैसे आप गुण अनुभाग से या प्रोग्राम के रूप में उपयोग करते हुए निर्माता में FormBorderStyle बदलकर बंद करें बटन छिपा सकते हैं:

public Form1() 
{ 
InitializeComponent(); 
this.FormBorderStyle = FormBorderStyle.None; 
} 

तो आप अनुप्रयोग से बाहर करने के लिए एक मेनू पट्टी आइटम बनाने के।

चियर्स

0

अगर यह

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

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
संबंधित मुद्दे