首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#winform缩小后,双击复原,无法实现类似QQ隐藏

2013-04-09 
C#winform缩小后,双击还原,无法实现类似QQ隐藏代码实现的是类似QQ那种拖到边界会自动隐藏的效果,开始的时

C#winform缩小后,双击还原,无法实现类似QQ隐藏
代码实现的是类似QQ那种拖到边界会自动隐藏的效果,开始的时候就可以,但是
第一个问题::当我点击缩小按钮后,,,再次双击托盘(notifyIcon1)显示窗体时,就无法再次实现QQ自动隐藏效果。。。。请问下,怎么解决此问题。。。

第二个问题::怎么让窗体再次显示时是在屏幕中间??我加上(

this.WindowState=FormWindowState.Normal
)没效果,,还是显示在屏幕的左上角。。

        //窗体隐藏效果

        int form_MODE = 0, 
            form_T = 3, 
            form_XY = 6;


        private void form_hide_Tick(object sender, EventArgs e)
        {
            if (MouseButtons == MouseButtons.Left)
                return;

            int x = MousePosition.X, y = MousePosition.Y;

            if (x > (this.Location.X - form_XY)
                &&
                x < (this.Location.X + this.Width + form_XY)
                &&
                y > (this.Location.Y - form_XY)
                &&
                y < (this.Location.Y + this.Height + form_XY))
            {
                if (this.form_MODE == 1)
                    this.Location = new Point(form_T, this.Location.Y);
                else if (this.form_MODE == 2)
                    this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width - form_T, this.Location.Y);
                else if (this.form_MODE == 3)
                    this.Location = new Point(this.Location.X, form_T);
            }

            else//鼠标移动到窗口外,隐藏
            {
                if (this.Location.Y <= form_T)//上
                {
                    this.Location = new Point(this.Location.X, form_T - this.Height);


                    this.form_MODE = 3;
                }
                else if (this.Location.X <= form_T)//左
                {
                    this.Location = new Point(form_T - this.Width, this.Location.Y);
                    this.form_MODE = 1;
                }
                else if (this.Location.X >= Screen.PrimaryScreen.WorkingArea.Width - this.Width - form_T)//右
                {
                    this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - form_T, this.Location.Y);
                    this.form_MODE = 2;
                }
                else
                    this.form_MODE = 0;
            }

        }

        private void main_Move(object sender, EventArgs e)
        {
            this.form_MODE = 0;
        }



        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.Visible == false)
            {
                this.WindowState = FormWindowState.Maximized;
                this.Visible = true;
                this.Activate();

            }
            else
            {
                this.WindowState = FormWindowState.Minimized;
                this.Visible = false;
            }
        }



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


[解决办法]
  
private FormWindowState _oldStatus=FormWindowState.Minimized;
 private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.Visible == false)
            {
                this.WindowState = _oldStatus;
                this.Visible = true;
                this.Activate();
 
            }
            else
            {
_oldStatus=this.WindowState;
                this.WindowState = FormWindowState.Minimized;
                this.Visible = false;
            }
        }
 这样试试看
[解决办法]
窗体显示在屏幕中间、可以取窗体高宽、屏幕高宽、然后取中心位置就OK吧
你下面的语句 只是把窗体的状态设为普通状态 、并没有位置的部分。
this.WindowState=FormWindowState.Normal

热点排行