用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任务栏中有对应的图标。有的时候,需要在程序最小行后,将程序图标仅仅显示在系统托盘,不在任务栏中显示。
这时,我们需要用到winform控件NotifyIcon,此控件用于运行时期间在 windows 任务栏右侧的通知区域显示图标。实现窗体最小化时显示到(桌面右下角)系统托盘的步骤如下:
1. 新建窗体,将NotifyIcon控件拖放到窗体上
2. 设置NotifyIcon控件的Icon属性,Icon的值是显示在系统托盘的图标(和窗体的图标可以不一样)
3. 设置窗体属性 showintaskbar = false
经过以上设置,启动程序后,在任务栏中不再显示窗体的图标,右下角系统托盘中也会显示NotifyIcon控件的图标。但是此时最小化窗体后,窗体没有隐藏,注意查看会发现窗体(一般情况下)最小化在桌面的右下角。为了彻底隐藏窗体,我们需要在窗体最小化时隐藏窗体。
4. 最小化时隐藏窗体,示例代码如下:
/// <summary> /// 最小化窗体时,隐藏窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_SizeChanged(object sender, EventArgs e) { // 判断只有最小化时,隐藏窗体 if (this.WindowState == FormWindowState.Minimized) { this.Hide(); } }
经过此步,最小化窗体后,窗体隐藏,只在右下角的系统托盘中显示NotifyIcon的图标。通常情况下,我们希望在点击NotifyIcon图标时,再显示窗体。但此时我们点击NotifyIcon图标时,发现没有任何反应,和我们希望看到的不一样。这时,我们可以使用如下设置。
5. 添加点击NotifyIcon图标事件(显示窗体),实例代码如下:
private void notifyIcon1_Click(object sender, EventArgs e) { // 正常显示窗体 this.Visible = true; this.WindowState = FormWindowState.Normal; }
经过以上设置,程序启动后,可以最小化隐藏(任务栏中也没有程序图标)并在系统托盘中显示程序指定的图标;在点击系统托盘图标后,也可以重新显示程序窗体。
当然,我们也可以根据自身需要,给NotifyIcon控件添加右键菜单等,用于显示或关闭程序。或者直接设置窗体的WindowState = Minimized,在启动程序后直接隐藏窗体。