C# 托盘程序设计

C#托盘程序


一. 托盘程序的主要步骤及解决方法: 

  为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm组件中定义了一个专门用来开发托盘程序的组件--NotifyIcon组件。下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。 

  (1).如何在程序运行后隐藏窗体: 

  我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下: 

protected override void OnActivated ( EventArgs e ) 

this.Hide ( ) ; 


  另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下: 

this.MaximizeBox = false ; 
this.MinimizeBox = false ; 
this.WindowState = System.Windows.Forms.FormWindowState.Minimized ; 

  在本文介绍的程序中,使用了第二种方法。 
(2).如何为托盘程序设定显示图标: 

  在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于Visual C#是一个完全的OOP (面向对象)语言,在Visual C#中任何东西都可以作为对象来处理。当然对应一个icon来说,也可以用对象的方法来处理他。我们通过下列语句来得到一个icon对象: 

private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ; 

  请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。 

  通过下列语句把此icon对象付给NotifyIcon组件中的icon属性,此时如果程序正确编译,则此icon就会显示在工具栏中了。 

TrayIcon.Icon = mNetTrayIcon ; 

  (3).设定当鼠标停留在托盘程序上显示的文本内容: 

  NotifyIcon组件中有一个属性Text。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下: 

TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ; 

  (4).如何在托盘程序加入菜单: 

  在NotifyIcon组件中有一个对象叫ContextMenu,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项: 

notifyiconMnu = new ContextMenu ( mnuItms ) ; 
TrayIcon.ContextMenu = notifyiconMnu ; 
//为托盘程序设定菜单 

  (5).如何设定ContextMenu对象的内容: 

  ContextMenu对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值(这当中包括菜单的一些属性和事件),然后把这个数组同时赋值给ContextMenu对象,来实现对ContextMenu对象的设置过程的。以下是程序中具体代码: 

//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象 
MenuItem [ ] mnuItms = new MenuItem [ 3 ] ; 
mnuItms [ 0 ] = new MenuItem ( ) ; 
mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ; 
mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ; 

mnuItms [ 1 ] = new MenuItem ( "-" ) ; 
mnuItms [ 2 ] = new MenuItem ( ) ; 
mnuItms [ 2 ] .Text = "退出系统" ; 
mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ; 
mnuItms [ 2 ] .DefaultItem = true ; 

notifyiconMnu = new ContextMenu ( mnuItms ) ; 
TrayIcon.ContextMenu = notifyiconMnu ; 
//为托盘程序加入设定好的ContextMenu对象 

  当成功加入了ContextMenu对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出ContextMenu对象封装好的菜单。 

  二. 本文介绍的程序源代码( Tray.cs ): 
Tray.cs源程序代码: 

using System ; 
using System.Drawing ; 
using System.Collections ; 
using System.ComponentModel ; 
using System.Windows.Forms ; 
using System.Data ; 
//导入在程序中使用到的名称空间 
public class Tray : Form 

 private System.ComponentModel.Container components = null ; 
 private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ; 
 private NotifyIcon TrayIcon ; 
 private ContextMenu notifyiconMnu ; 

 public Tray() 
 { 
  //初始化窗体中使用到的组件 
  InitializeComponent ( ) ; 
  //初始化托盘程序的各个要素 
  Initializenotifyicon ( ) ; 
 } 

private void Initializenotifyicon ( ) 

 //设定托盘程序的各个属性 
 TrayIcon = new NotifyIcon ( ) ; 
 TrayIcon.Icon = mNetTrayIcon ; 
 TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ; 
 TrayIcon.Visible = true ; 
 TrayIcon.Click += new System.EventHandler ( this.click ) ; 

 //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象 
 MenuItem [ ] mnuItms = new MenuItem [ 3 ] ; 
 mnuItms [ 0 ] = new MenuItem ( ) ; 
 mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ; 
 mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ; 

 mnuItms [ 1 ] = new MenuItem ( "-" ) ; 

 mnuItms [ 2 ] = new MenuItem ( ) ; 
 mnuItms [ 2 ] .Text = "退出系统" ; 
 mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ; 
 mnuItms [ 2 ] .DefaultItem = true ; 

 notifyiconMnu = new ContextMenu ( mnuItms ) ; 
 TrayIcon.ContextMenu = notifyiconMnu ; 
 //为托盘程序加入设定好的ContextMenu对象 

public void click ( object sender , System.EventArgs e ) 

 MessageBox.Show ( "Visual C#编写托盘程序中的事件响应" ) ; 


public void showmessage ( object sender , System.EventArgs e ) 

 MessageBox.Show ( "你点击了菜单的第一个选项" ) ; 


public void ExitSelect ( object sender , System.EventArgs e ) 

 //隐藏托盘程序中的图标 
 TrayIcon.Visible = false ; 
 //关闭系统 
 this.Close ( ) ; 

//清除程序中使用过的资源 
public override void Dispose ( ) 

 base.Dispose ( ) ; 
 if ( components != null ) 
  components.Dispose ( ) ; 


private void InitializeComponent ( ) 

 this.SuspendLayout ( ) ; 
 this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ; 
 this.ClientSize = new System.Drawing.Size ( 320 , 56 ) ; 
 this.ControlBox = false ; 
 this.MaximizeBox = false ; 
 this.MinimizeBox = false ; 
 this.WindowState = System.Windows.Forms.FormWindowState.Minimized ; 

 this.Name = "tray" ; 
 this.ShowInTaskbar = false ; 
 this.Text = "用Visual C#做托盘程序!" ; 
 this.ResumeLayout ( false ) ; 


static void Main ( ) 

 Application.Run ( new Tray ( ) ) ; 



  三. 总结: 

  通过以上介绍,可以看出用Visual C#做一个托盘程序并不是一件复杂的事情。


--------------------------------------------------------------------

用控件的方法:

C#处理的窗体最小化到托盘,以及双击恢复窗口代码。

一:添加notifyIcon1控件。添加各种事件响应······

二:右键快捷菜单的添加:
1:添加contextMenuStrip控件,设置各个项
2:添加各个项的处理事件
3:与前面的notifyIcon1控件绑定(通过contextMenuStrip属性设置)

点击(此处)折叠或打开

  1. #region 私有方法 处理窗体的 显示 隐藏 关闭(退出)
  2.         private void ExitMainForm() //关闭(退出)

  3.         {
  4.             if (MessageBox.Show("您确定要退出化本系统吗?", "确认退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
  5.             {
  6.                 this.notifyIcon1.Visible = false;
  7.                 this.Close();
  8.                 this.Dispose();
  9.                 Application.Exit();
  10.             }
  11.         }

  12.         private void HideMainForm() //隐藏

  13.         {
  14.             this.Hide();
  15.         }

  16.         private void ShowMainForm() //显示主窗口

  17.         {
  18.             this.Show();
  19.             this.WindowState = FormWindowState.Normal;
  20.             this.Activate();
  21.         }
  22.         #endregion

  23.         #region 右键菜单处理,显示 隐藏 退出
  24.         private void menuItem_Show_Click(object sender, EventArgs e)
  25.         {
  26.             ShowMainForm();
  27.         }

  28.         private void menuItem_Hide_Click(object sender, EventArgs e)
  29.         {
  30.             HideMainForm();
  31.         }

  32.         private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
  33.         {
  34.             ExitMainForm();
  35.         }

  36.         private void 还原ToolStripMenuItem_Click(object sender, EventArgs e)
  37.         {
  38.             ShowMainForm();
  39.         }

  40.         #endregion

  41.         #region 双击托盘上图标时,显示窗体
  42.         private void notifyIcon1_DoubleClick_1(object sender, EventArgs e)
  43.         {
  44.             ShowMainForm();
  45.         }
  46.         #endregion

  47.         #region 点最小化按钮时,最小化到托盘
  48.         private void Form_Server_SizeChanged(object sender, EventArgs e)
  49.         {
  50.             if (this.WindowState == FormWindowState.Minimized)
  51.             {
  52.                 HideMainForm();
  53.             }
  54.         }
  55.         #endregion

  56.         #region 窗体关闭时最小化到托盘
  57.         private void Form_Server_FormClosing(object sender, FormClosingEventArgs e)
  58.         {
  59.             e.Cancel = true;

  60.             HideMainForm();
  61.         }
  62.         #endregion
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值