最小化应用程序显示在任务栏上方

mac*_*ack 5 c# minimize winforms

我有一个我不想在任务栏中显示的应用程序.当应用程序最小化时,它最小化到SysTray.

问题是,当我将ShowInTaskbar = false最小化的应用程序设置在任务栏上方时,只需使用Windows 7启动按钮即可.如果我设置ShowInTaskbar = true应用程序最小化,但显然应用程序显示在任务栏中.

知道为什么会发生这种情况以及如何解决这个问题吗?

未能最小化

编辑:为了清楚起见,这里是我正在使用的代码:

private void Form1_Resize(object sender, EventArgs e)
        {
            if (WindowState == FormWindowState.Minimized) {                                                                                    
                this.Hide(); 
                this.Visible = false;         
                notifyIcon1.Visible = true;           
            }
            else
            {
                notifyIcon1.Visible = false; 
            }
        }

    private void btnDisable_Click(object sender, EventArgs e)
    {

        // Minimize to the tray
        notifyIcon1.Visible = true;
        WindowState = FormWindowState.Minimized; // Minimize the form
    }
Run Code Online (Sandbox Code Playgroud)

Moo*_*ght 3

当表单的最小化请求被触发时,没有需要建立的事件处理程序。因此,要在表单最小化之前“进入”,您必须挂钩 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 && this.minimizeToTray)
            {
                PerformYourOwnOperation();  // For example
            }
            break;
    }
    base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)

PerformYourOwnOperation();然后你可以只隐藏方法中的表单

public void PerformYourOwnOperation()
{
    Form form = GetActiveForm();
    form.Hide();
}
Run Code Online (Sandbox Code Playgroud)

然后,您将需要某种机制来Show()隐藏表单,否则它将丢失。

另一种方法是使用表单的调整大小事件。然而,这会在表单最小化后触发。要做到这一点,你可以做类似的事情

private void Form_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        // Do some stuff.
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。