2008-11-25 16 views
6

मेरे आवेदन में मुझे मुख्य रूप से कम से कम बटन को अस्थायी रूप से ग्रे करने की आवश्यकता है। कोई विचार यह कैसे प्राप्त किया जा सकता है? मुझे Win32 dlls पर p/invokes करने में कोई फर्क नहीं पड़ता।सी # में न्यूनतम बटन को कैसे अक्षम करें?

संपादित करें: न्यूनतम बटन को बाहर निकालना पसंदीदा समाधान होगा, लेकिन क्या फॉर्म को कम करने से रोकने का कोई अन्य तरीका है?

उत्तर

11

मैंने अपनी प्रतिक्रिया के संबंध में आपकी टिप्पणी पढ़ी और आपके लिए एक और पूर्ण समाधान तैयार करने में सक्षम था। मैं इसे जल्दी से चला गया और ऐसा लगता था कि आप जो व्यवहार चाहते थे। इसके बजाय फार्म से अपने WinForms पाने की, इस वर्ग से निकाले जाते हैं:


using System; 
using System.Windows.Forms; 
using System.ComponentModel; 

namespace NoMinimizeTest 
{ 
    public class MinimizeControlForm : Form 
    { 
     private const int WM_SYSCOMMAND = 0x0112; 
     private const int SC_MINIMIZE = 0xf020; 

     protected MinimizeControlForm() 
     { 
      AllowMinimize = true; 
     } 

     protected override void WndProc(ref Message m) 
     { 
      if (!AllowMinimize) 
      { 
       if (m.Msg == WM_SYSCOMMAND) 
       { 
        if (m.WParam.ToInt32() == SC_MINIMIZE) 
        { 
         m.Result = IntPtr.Zero; 
         return; 
        } 
       } 
      } 
      base.WndProc(ref m); 
     } 

     [Browsable(true)] 
     [Category("Behavior")] 
     [Description("Specifies whether to allow the window to minimize when the minimize button and command are enabled.")] 
     [DefaultValue(true)] 
     public bool AllowMinimize 
     { 
      get; 
      set; 
     } 
    } 
} 

यदि आप तय करने के उदाहरण के लिए है कि क्या समय क्लिक भेज दिया जाता है पर कम से कम अनुमति देने के लिए सक्षम होने के लिए चाहते थे थोड़ा अधिक कर सकता है:


using System; 
using System.Windows.Forms; 
using System.ComponentModel; 

namespace NoMinimizeTest 
{ 
    public class MinimizeControlForm : Form 
    { 
     private const int WM_SYSCOMMAND = 0x0112; 
     private const int SC_MINIMIZE = 0xf020; 

     protected MinimizeControlForm() 
     { 

     } 

     protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == WM_SYSCOMMAND) 
      { 
       if (m.WParam.ToInt32() == SC_MINIMIZE && !CheckMinimizingAllowed()) 
       { 
        m.Result = IntPtr.Zero; 
        return; 
       } 
      } 
      base.WndProc(ref m); 
     } 

     private bool CheckMinimizingAllowed() 
     { 
      CancelEventArgs args = new CancelEventArgs(false); 
      OnMinimizing(args); 
      return !args.Cancel; 
     } 

     [Browsable(true)] 
     [Category("Behavior")] 
     [Description("Allows a listener to prevent a window from being minimized.")] 
     public event CancelEventHandler Minimizing; 

     protected virtual void OnMinimizing(CancelEventArgs e) 
     { 
      if (Minimizing != null) 
       Minimizing(this, e); 
     } 
    } 
} 

इस विंडो अधिसूचना के बारे में अधिक जानकारी के लिए, MSDN article about it देखें।

10
form.MinimizeBox = false; 

या रूप दायरे में अगर

MinimizeBox = false; 
+0

यह न्यूनतम बॉक्स को छुपाता है, लेकिन इसे ग्रे नहीं करता है। –

+1

हम्म, अजीब। मैंने इसका परीक्षण किया और यह इसे बाहर निकाल देता है। यह अभी भी है, अर्ध पारदर्शी और आप इसे क्लिक नहीं कर सकते हैं। – Coincoin

+2

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

1

बस कर MinimizeBox = झूठी; आपके फॉर्म के कोड में।

0

तुम भी आदेश

+0

अगर ऐसा कोई ईवेंट होता तो वह काम करेगा। :) – MusiGenesis

1

आपके प्रपत्र का आकार घटना में इस कोड डाल रद्द करने के लिए घटना को छोटा करने के लिए संभाल लागू कर सकते हैं:

if (this.WindowState == FormWindowState.Minimized) 
{ 
    this.WindowState = FormWindowState.Normal; 
} 

इससे आपके फ़ॉर्म अन-minimizable (अस्वीकरण कर देगा: मुझे क्या करना इस तरह से खिड़कियों के मानक व्यवहार को बदलने में वकील नहीं है)।

0

मत करो। मेरी खिड़कियों के साथ गड़बड़ मत करो। वे मेरा हैं, तुम्हारा नहीं। यह मेरा कंप्यूटर है और यदि मैं कम करना चाहता हूं, तो मुझे सक्षम होना चाहिए। मैं ऐसा नहीं कर सकता, और कभी नहीं दिया गया है, ऐसा करने का एक अच्छा कारण है।

+7

मैं "परमाणु ऊर्जा संयंत्र कोर निगरानी सॉफ्टवेयर" के साथ जाने जा रहा हूं।अगर लेखक उस खिड़की को कम से कम बनाना चाहता है, तो मैं इसके साथ ठीक हूं। – MusiGenesis

+4

जब तक निगरानी सॉफ्टवेयर सब कुछ लाल-अस्तर दिखा रहा है और मॉनिटरिंग सॉफ्टवेयर विंडो – Kevin

+8

के पीछे "आपातकालीन शटडाउन" बटन स्थित है, भगवान के लिए परमाणु ऊर्जा स्टेशनों के लिए सी # WinForms का उपयोग नहीं करते हैं! –

0

सिक्काकोइन का जवाब सही है। MinimizeBox डिजाइनर गुण विंडो में एक संपत्ति के रूप में भी उपलब्ध है।

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

+0

मिनिमइज़बॉक्स को गलत पर सेट करना आम तौर पर पर्याप्त होगा, लेकिन मेरे मामले में मैक्सिमाइज़बॉक्स भी छिपा हुआ है। जब MinimizeBox दिखाया गया है, टूलबार 3 बटन प्रस्तुत करता है - कम से कम, ग्रेड आउट अधिकतम, बंद करें। लेकिन जब जब MinimizeBox को गलत पर सेट किया जाता है, तो न्यूनतम/अधिकतम बटन अब प्रस्तुत नहीं किए जाते हैं। –

+0

या उन्हें इसे भरने के लिए मोडल फॉर्म के पीछे जानकारी का एक टुकड़ा देखने की आवश्यकता हो सकती है और उस जानकारी को बेहतर तरीके से देखने के लिए इसे कम करना चाहते हैं। इसके अलावा, चूंकि इस सवाल को नौसिखिया प्रोग्रामर द्वारा देखा जा सकता है, इसलिए मैं इस सलाह को उनके लिए वहां रखना चाहता था। – Kevin

0

बस अपने फॉर्म की मिनीमाइज़बॉक्स संपत्ति को गलत पर सेट करें। इससे कम से कम बटन अक्षम हो जाएगा लेकिन अन्य बटन कार्यात्मक बने रहेंगे।

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