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

系统不能关机或注销,请问!

2012-01-11 
系统不能关机或注销,请教!!!我用VB.NET写了一个有托盘图标的程序,当点击窗体的关闭按钮时也是使窗口最小化

系统不能关机或注销,请教!!!
我用VB.NET写了一个有托盘图标的程序,当点击窗体的关闭按钮时也是使窗口最小化,并且不在任务栏上显示图标,通过点击托盘图标可使窗口状态交替变换,这些是我模仿金山词霸的.
现在的问题是当窗口最小化时,即只有托盘图标时,将使系统不能注销或关机,只有手动退出程序后才行.我想象金山词霸那样,不用手动而是接到消息后自动退出程序,该怎么样做呢?

[解决办法]
不知道你有没有定义系统快捷键,或者你的程序过滤了关机的消息.
[解决办法]
如果你使用.NET 2.0 的话, 改用 Form.FormClosing 事件 

这个事件使用FormClosingEventArgs ,提供了 Cancel 和 CloseReason,CloseReason是一个枚举,表示关闭 原因,有一下这些值

 ApplicationExitCall Application 类的 Exit 方法被调用。
 FormOwnerClosing 所有者窗体正在关闭。
 MdiFormClosing 此多文档界面 (MDI) 窗体的父窗体正在关闭。
 None 关闭原因未定义或者无法确定。
 TaskManagerClosing Microsoft Windows 任务管理器正在关闭应用程序。
 UserClosing 用户正在通过用户界面 (UI) 关闭该窗体,例如通过单击窗体窗口上的“关闭”按钮,通过选择窗口控制菜单上的“关闭”按钮,或者通过按 Alt+F4 等方式关闭。
 WindowsShutDown 操作系统正在关闭所有应用程序以便准备关机。

因为都处理了, 所以无法关机和注销吧
[解决办法]
终于解决了~~加一个判断 关闭事件时判断窗体状态

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.WindowState==FormWindowState.Normal||this.WindowState==FormWindowState.Maximized)
{
MinShowForm();
e.Cancel = true;
}
else
{
e.Cancel=false;
}
}

托盘的关闭事件用
private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
{
if (MessageBox.Show("确认退出本系统?","退出询问",MessageBoxButtons.YesNo,MessageBoxIcon.Question )== DialogResult.Yes)
{
allowExit = true;
Application.Exit();
}
}
为了方便这里用的托盘图标双击关闭程序```可以把代码加加到托盘的其他事件里

这样就算电脑关闭时程序的界面是显示的 但在接受到电脑关闭命令会最小化到托盘 然后再关闭程序

这样电脑就能关闭了!

热点排行