窗体的ShowInTaskbar属性值为:False.并且使用notifyIcon控件,让窗体显示在托盘处...但是将窗体最小化时...会将窗体最小化到桌面的左下角(开始菜单上面)..我想实现将窗体最小化到托盘...就像QQ那样的效果...请高手帮帮忙

解决方案 »

  1.   

     private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                    this.WindowState = FormWindowState.Normal;
                this.Activate();
            }
      

  2.   

    notifyIcon``拖一个进FORM就行了 
      

  3.   

    添加一个控件:NotifyIcon
    写代码:
     private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Visible = false;
                    notifyIcon1.Visible = true;
                }
            }        private void notifyIcon1_Click(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Visible = true;
                    this.WindowState =FormWindowState.Normal;
                    notifyIcon1.Visible = false;
                }
            }
    即可
      

  4.   

            private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.WindowState = FormWindowState.Normal;
                    this.Activate();
                }
                else
                {
                    this.WindowState = FormWindowState.Minimized;
                }
            }notifyIcon的属性的Icon要设置一个ico的图标文件,不然可能在托盘里面看不见!
      

  5.   


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

  6.   

    最小化后 this.Visible=false;就不会再左端了
      

  7.   

    首先添加一个norifyicon控件,然后写下面的代码
    private void Form1_Resize(object sender, System.EventArgs e) {
    if (this.WindowState == FormWindowState.Minimized) {
    this.Visible = false;
    this.notifyIcon1.Visible = true;
    }
    }private void notifyIcon1_Click(object sender, System.EventArgs e) {
    this.Visible = true;
    this.WindowState = FormWindowState.Normal;
    this.notifyIcon1.Visible = false;
    }
      

  8.   

    谢谢各位...我的代码跟你们的代码都差不多...惟一不同的是我用的是THIS.HIDE()和THIS.SHOW().你们用的是VISIBLE这样都是使窗口最小化之后不在桌面显示一个窗体的小标题..实现了窗体在最小化后从桌面消息..但是我想问的问题是怎样才能在最小化的时候..实现像QQ那样的动画...可以很明显的看到QQ是从桌面最小化到托盘的这样一个动画效果....
      

  9.   


    这个特效要自己写的...你可以在QQ窗体当按下"最小化"...就显示出一个大小只和QQ窗体的标题大小的一个小窗体...再用一个Timer来控制动画帧...窗体递减大小...还有X,Y坐标递加...就行了...托盘的位置是可以算出来的...这个算法你自己想吧...很简单...
      

  10.   

    转来的  很详细...  理解的话可以自己把双击弹出改成单击左键弹出.首先,当然要引入NotifyIcon控件。 
    private System.Windows.Forms.NotifyIcon notifyIconServer; 
    this.notifyIconServer = new System.Windows.Forms.NotifyIcon(this.components); 接下来设置控件的各项属性: 
    // 
    // notifyIconServer 
    // 
    this.notifyIconServer.ContextMenu = this.contextMenuTray;//指定上下文菜单 
    this.notifyIconServer.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIconServer.Icon")));//指定图标 
    this.notifyIconServer.Text = "My Server";//指定鼠标悬停显示 
    this.notifyIconServer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.notifyIconServer_MouseDown); 
    this.notifyIconServer.DoubleClick += new System.EventHandler(this.notifyIconServer_DoubleClick); // 
    // contextMenuTray 上下文菜单 
    // 
    this.contextMenuTray.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
    this.menuItem1, 
    this.menuItem2}); 
    // 
    // menuItem1 
    // 
    this.menuItem1.Index = 0; 
    this.menuItem1.Text = "打开 Chat Server"; 
    this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click); 
    // 
    // menuItem2 
    // 
    this.menuItem2.Index = 1; 
    this.menuItem2.Text = "退出程序"; 
    this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click); 用户点击窗体的“关闭”小按钮时,并不真正关闭窗体,而是将程序放到系统托盘。 private void ChatForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 

    e.Cancel = true; // 取消关闭窗体 
    this.Hide(); 
    this.ShowInTaskbar = false; 
    this.notifyIconServer.Visible = true;//显示托盘图标 
    } notifyIcon的双击事件,可以恢复程序窗体: private void notifyIconServer_DoubleClick(object sender, System.EventArgs e) 

    this.Show(); 
    if (this.WindowState == FormWindowState.Minimized) 
    this.WindowState = FormWindowState.Normal; 
    this.Activate(); 
    } 附加要求:单击鼠标左键也可调出一菜单。 解决方案如下: 首先声明一个上下文菜单: // 
    // contextMenuLeft 左键菜单 
    // 
    this.contextMenuLeft.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
    this.menuItem3}); 
    // 
    // menuItem3 
    // 
    this.menuItem3.Index = 0; 
    this.menuItem3.Text = "关于……"; 由于不能在notifyIcon上直接显示上下文菜单,只有创建一个Control作为容器,这是权宜之计,应该有更好的方法吧。 
    private void notifyIconServer_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 

    if(e.Button==MouseButtons.Left) 

    Control control = new Control(null,Control.MousePosition.X,Control.MousePosition.Y,1,1); 
    control.Visible = true; 
    control.CreateControl(); 
    Point pos = new Point(0,0);//这里的两个数字要根据你的上下文菜单大小适当地调整 
    this.contextMenuLeft.Show(control,pos); 

    }
    参考资料:http://blog.csdn.net/trnbo/
      

  11.   

    微软提供了这样的API函数可以实现The DrawAnimatedRects function draws a wire-frame rectangle and animates it to indicate the opening of an icon or the minimizing or maximizing of a window.BOOL DrawAnimatedRects(
      HWND hwnd,            // handle to clipping window
      int idAni,            // type of animation
      CONST RECT *lprcFrom, // rectangle coordinates (minimized)
      CONST RECT *lprcTo    // rectangle coordinates (restored)
    );
      

  12.   

    VB.NET
    Public Class Form1
      '恢复最小化到托盘的程序
      Private Sub 显示窗体ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 显示窗体ToolStripMenuItem.Click
        Me.WindowState = FormWindowState.Normal
      End Sub  Private Sub 退出ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出ToolStripMenuItem.Click
        End
      End SubEnd Class