我共有两个窗口,一个是登录窗口,一个是主窗口,登录成功打开主窗口,登录窗口最小化时隐藏此窗口到系统托盘,添加了NotifyIcon控件名为nti并设置了ICON图标,下面是主程序入口代码:
static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);            Form Login = new LoginFrom();
            Form Main = new MianForm;
            Login.ShowDialog();
            if (Login.DialogResult==DialogResult.OK)
            {
                Application.Run(Main);
            }
        }
    }
响应SizeChanged事件代码如下:
private void LoginFrom_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState==FormWindowState.Minimized)
            {
                this.Hide();
                this.nti.Visible = true;
            }
        }
双击NotifyIcon控件再次打开登录窗口:
private void nti_DoubleClick(object sender, EventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
            this.CenterToScreen();
        }
现在我陈述下我出现的问题,就是在点登录窗口最小化时,程序莫名其妙在系统托盘消失了。
于是我进行了跟踪,将断点设在SizeChanged事件上,发现在程序启动时,SizeChanged事情被执行了两次,不明白为啥,按我理解应该执行一次才对,因为刚开始我没有触发过任何SizeChanged事件。
程序登录窗口正常显示出来,我接着点击窗口最小化按扭,其怪的是,根据断点发现SizeChanged事件被执行了三次,每次拿到的WindowState都是FormWindowState.Minimized,也都执行了判断里面的代码,但第三次也就是最后一次执行完时,代码执行跳到了主程序Login.ShowDialog()后面了,而且得到DialogResult.Cancel,导致程序运行结束了。
此时我网上查了资料,有些人遇到这样问题,但询问无果,而且ShowDialog()在此时也不应该往下运行吧,应该是处于等待状态吧。
请问各位大侠、高手这是什么原因所致,非常感谢。

解决方案 »

  1.   

    想知道为什么执行多次,你断点看看堆栈信息就知道是哪触发了事件,跟踪designer.cs中代码也可以看到
      

  2.   

    是啊,多次我也不理解,我现在按你方法断点看一下,不过更让我不理解的是,我点击的最小化,为什么ShowDialog()跳出了等待状态,而且还返回DialogResult.Cancel,百思不得其解啊。
      

  3.   

    哪个都可以最小化,NotifyIcon应用于整个应用程序。你说的和我出现的问题有关系?这里不能最小化吗?最小化就会出现这样的问题?我还是不理解。
      

  4.   

    按照#1说的方法去调试,如果你不会debug,那么就算了吧,真难为你了。