private void frmMain_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide();
            }
        }这段程序可以最小化托盘,已经实现了。但是当光标停留在程序上,并点击任务栏运行的程序后也触发了SizeChanged这个事件被最小化了,请问怎么避免点击任务栏中的窗体不进入SizeChanged事件中,谢谢,只有最小化的时候触发。

解决方案 »

  1.   

    重写窗体 WndProc 方法
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case 0x0112: // WM_SYSCOMMAND
                {
                    if (m.WParam.ToInt32() == 0xF020) // SC_MINIMIZE
                    {
                        if (m.LParam.ToInt32() > 0)
                        {
                            // 点击的
                        }
                    }                break;
                }
            default:
                break;
        }
        base.WndProc(ref m);
    }
      

  2.   

    接3楼,if (m.LParam.ToInt32() > 0) 成立是点击的最小化按钮,不成立是点的任务栏
      

  3.   

    我觉得你的最小化到托盘可以这样写:
    1 拉一个NotifyIcon控件notifyIcon,为控件notifyIcon的属性Icon添加一个icon图标。
    2 private void frmMain_SizeChanged(object sender, EventArgs e)
    {
     if(this.WindowState == FormWindowState.Minimized) 
        { 
           this.Hide(); 
           this.notifyIcon1.Visible=true; 
        } 
    }
    3 为notifyIcon1添加双击事件
    private void notifyIcon1_Click(object sender, EventArgs e) 

        this.Visible = true; 
        this.WindowState = FormWindowState.Normal; 
        this.notifyIcon1.Visible = false; 
    } 4 也可以再给notifyIcon添加右键菜单
      

  4.   


    在From窗体中增加了上面的事件,然后在if (m.WParam.ToInt32()中增加了 this.Hide();可以区分出点击了 任务栏或者最小化  但是它一直循环,最后最小化,点任务栏都没有隐藏,区分开了也进入代码了,最小化没有隐藏掉窗体。
      

  5.   

    加 return
    if (m.LParam.ToInt32() > 0)
    {
        this.Hide();
        return;
    }
      

  6.   

    是 windows 消息的值,16进制的写法,学习这些可以适当处理 .net 没提供的部分功能,具体的你搜下 windows 消息