2012-09-14 15 views
7

मैं नीचे दी गई छवि में एक फॉर्म के बंद बटन को कैसे अक्षम कर सकता हूं? (नीचे छवि एक MessageBox विंडो दिखाने)क्या मैं सी # का उपयोग कर फ़ॉर्म के 'क्लोज़' बटन को अक्षम कर सकता हूं?

enter image description here

MessageBox ऊपर मेरे द्वारा उत्पन्न किया गया था! मैं एक सामान्य रूप के बंद बटन को अक्षम करना चाहता हूं।

+0

मैं छवि को देखने में सक्षम नहीं हूं? :(:( –

+2

आपको शायद नहीं करना चाहिए। इसे "नो" के समान ही संभाल लें। वैकल्पिक रूप से, आप अपना खुद का मॉडल पॉप-अप बना सकते हैं और इसे डिज़ाइन कर सकते हैं, हालांकि आपको – musefan

+0

'एक्स' समीकरणों में 'नहीं' बराबर है। उपयोगकर्ता उस पर क्लिक करता है, उसे नहीं पता कि उसे क्या जवाब देना है, इसलिए आपको * कुछ भी छूए बिना उन्हें अपना मन बना देना चाहिए। – Alex

उत्तर

9

आप प्रपत्र के ईवेंट (और बंद घटना नहीं) को संभालते हैं।

और फिर आप यह तय करने के लिए e.CloseReason का उपयोग करते हैं कि आप वास्तव में इसे अवरोधित करना चाहते हैं (UserClose) या नहीं (कार्य प्रबंधक बंद करें)।

इसके अलावा, codeproject पर Disabling Close Button on Forms छोटा उदाहरण है।

3

आप CreateParams समारोह से System.Windows.Forms.Form

व्युत्पन्न ओवरराइड और कक्षा शैली

myCp.ClassStyle = 0x200; 
12

सही सवाल में विंडो पर क्लिक करें बदलना चाहिए, फिर गुण क्लिक करें। गुणों के तहत घटनाओं पर क्लिक करें। FormClosing ईवेंट पर डबल क्लिक करें।

निम्नलिखित कोड विंडोज फार्म डिजाइनर द्वारा उत्पन्न हो जाएगा:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 

} 

, बस (e.Cancel = true; जोड़ने) इस तरह देखने के लिए कोड अद्यतन:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = true; 
} 

आप काम हो गया!

वैकल्पिक रूप से, अगर आप, बंद निष्क्रिय करने के लिए अधिकतम करने और खिड़की के बटन को कम से कम करना चाहते हैं:

आप सही सवाल में खिड़की क्लिक कर सकते हैं, फिर गुण क्लिक करें। गुणों के तहत ControlBox संपत्ति false पर सेट करें।

+0

यह वही है जो मैं बाद में था! कम से कम Winform अनुभव (पहले asp.net केवल) होने में मदद मिली! धन्यवाद! – Ric

7

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

इसके बजाय हम निम्नलिखित कोड का उपयोग करना चाहिए:

[DllImport("user32")] 
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 

[DllImport("user32")] 
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable); 

public static void DisableCloseButton(this Form form) 
{ 
    // The 1 parameter means to gray out. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1); 
} 

public static void EnableCloseButton(this Form form) 
{ 
    // The zero parameter means to enable. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0); 
} 

आप ControlBox = false सेट कर सकते हैं ¹ अगर आप किसी भी बटन नहीं करना चाहते हैं, लेकिन वह नहीं है क्या सवाल पूछ रहा है।

0
Closing += (s, eventArgs) => 
     { 
      DialogResult = DialogResult.None; //means that dialog would continue running 
     }; 
संबंधित मुद्दे

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