我做了一个托盘程序,再打开程序时,能正确隐藏窗口。通过托盘打开窗口,点击窗口最小化,重新隐藏窗口,可再通过托盘显示时,窗口只能显示标题栏,这是怎么回事啊?
程序在下面:
        public Form1()
        {
            InitializeComponent();
            Initializenotifyicon();//使用托盘显示初始化
        }
        private void Initializenotifyicon()
        {
            this.MaximizeBox = false;
            this.ShowInTaskbar = false;
            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
            this.Visible = false;            this.SizeChanged += new EventHandler(Form1_SizeChanged);            TrayIcon = new NotifyIcon();
            TrayIcon.Icon = mNetTrayIcon;
            TrayIcon.Text = "事件监听程序" + "\n" + "版权:北京安图公司";
            TrayIcon.Visible = true;
            TrayIcon.Click += new System.EventHandler(this.OpenForm);            MenuItem[] mnuItms = new MenuItem[3];            mnuItms[0] = new MenuItem();
            mnuItms[0].Text = "打开";
            mnuItms[0].Click += new EventHandler(this.OpenForm);
            mnuItms[0].DefaultItem = true;            mnuItms[1] = new MenuItem("-");            mnuItms[2] = new MenuItem();
            mnuItms[2].Text = "退出系统";
            mnuItms[2].Click += new EventHandler(this.CloseForm);            notifyiconMnu = new ContextMenu(mnuItms);
            TrayIcon.ContextMenu = notifyiconMnu;
        }        private void OpenForm(object sender, System.EventArgs e)
        {
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
            this.Visible = true;
            this.Show();
        }        private void CloseForm(object sender, System.EventArgs e)
        {
            TrayIcon.Visible = false;
            this.Close();
        }        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)
            {
                this.ShowInTaskbar = false;
                this.Visible = false;
            }
        }

解决方案 »

  1.   

    感觉这个有问题
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)
                {
                    this.ShowInTaskbar = false;
                    this.Visible = false;
                }
            }去掉这个事件看看如果没用得话
      

  2.   

    Red_angelX:
    去掉这个的话,会在windows的左下角显示最小化的窗口,而我想实现的是最小化后,都不显示,只在托盘那里显示图标。
      

  3.   

    给你参考一下,我封装在类库中的一段,有疑问加我的msn: [email protected]
    ====================================================================
            /// <summary>
            /// Occurs before the form is closed.
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                notifyIcnMainFrm.Visible = this.m_VisibleBalloonInTaskBar;            InitBalloonOfTaskBar();            if (!VisibleBalloonInTaskBar)
                {
                    if (m_FormType == TypeOfForms.SubForm)
                        return;
                    else if (m_FormType == TypeOfForms.MainForm)
                    {
                        Application.Exit();
                        return;
                    }
                }            //event while closing forms.
                if (this.WindowState != FormWindowState.Minimized)
                {
                    e.Cancel = true;
                    this.WindowState = FormWindowState.Minimized;
                    this.Hide();
                    this.notifyIcnMainFrm.ShowBalloonTip(m_TipPeriod, m_strTipTitle, m_strTipText, ToolTipIcon.Info);
                    ResetTextImageOfContentTextMenu(m_conTxtType);
                }
                else  //if (this.WindowState != FormWindowState.Maximized)
                {
                    e.Cancel = false;
                    Application.Exit();
                }        }
      

  4.   

    那你重写DefWndProc捉WM_MIN消息就行了  消息代码不记得了百度一下