विंडोज़ फॉर्म को कम करने पर कैसे पता लगाया जाए?


84

मुझे पता है कि मैं WindowState द्वारा वर्तमान स्थिति प्राप्त कर सकता हूं, लेकिन मैं जानना चाहता हूं कि क्या कोई ऐसी घटना है जो उपयोगकर्ता द्वारा फ़ॉर्म को कम करने की कोशिश करने पर आग लग जाएगी।

जवाबों:


122

आप इवेंट का आकार बदल सकते हैं और फ़ॉर्म को देख सकते हैं। घटना में संपत्ति का पता लगाएं।

private void Form1_Resize ( object sender , EventArgs e )
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Do some stuff
    }
}

2
ध्यान दें कि यह उन स्थानों में से एक प्रतीत होता है जहां अपवादों को निगला जा सकता है
जोनाथन रेनहार्ट 3

1
आपको इसकी भी आवश्यकता है। Rizeize + = new System.EventHandler (यह। Form1_Resize);
टॉम

79

फॉर्म को छोटा किए जाने से पहले आपको WndProc प्रक्रिया में शामिल होना होगा:

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020; 

    [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {
        switch(m.Msg)
        {
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE)
                {
                    // Do your action
                }
                // If you don't want to do the default action then break
                break;
        }
        base.WndProc(ref m);
    }

घटना के बाद फॉर्म में हुक को कम करने के लिए प्रतिक्रिया करने के लिए Resizeक्योंकि अन्य उत्तर इंगित करते हैं (पूर्णता के लिए यहां शामिल है):

private void Form1_Resize (object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do your action
    }
}

0xF030 सामान्य विंडो स्थिति से अधिकतम होने पर है। 0xF120 है जब विंडोज़ बार से अधिकतम
k4yaman

दरअसल, यह केवल मिनिमम क्लिक इवेंट को पकड़ता है ! WM_SIZE (0x0005) और SIZE_MINIMIZED (1)
Ori Nachum

17

मुझे एक विशिष्ट घटना के बारे में पता नहीं है , लेकिन Resizeघटना कम होने पर आग लग जाती है, आप FormWindowState.Minimizedउस घटना की जांच कर सकते हैं


2
यह एक निजी "लास्टस्टैट" ध्वज के साथ संयुक्त है जो इसके बारे में जाने का सबसे आसान तरीका है।
मैथ्यू शार्ले

7

WPF विंडो के लिए खोज करने वाले लोगों के लिए घटना को कम करने:

यह थोड़ा अलग है। कॉलबैक उपयोग के लिए WindowState:

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do some stuff
    }
}

उपयोग करने की घटना स्टेटचेनड है (बजाय आकार बदलें):

public Main()
{
    InitializeComponent();
    this.StateChanged += Form1_Resize;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.