我共有两个窗口,一个是登录窗口,一个是主窗口,登录成功打开主窗口,登录窗口最小化时隐藏此窗口到系统托盘,添加了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()在此时也不应该往下运行吧,应该是处于等待状态吧。
请问各位大侠、高手这是什么原因所致,非常感谢。
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()在此时也不应该往下运行吧,应该是处于等待状态吧。
请问各位大侠、高手这是什么原因所致,非常感谢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货