zoukankan      html  css  js  c++  java
  • 在C#实现托盘效果(转)

    桌面程序的开发中,经常考虑能在状态栏实现托盘快捷操作,托盘程序的实现在API时代,还是相对复杂的,首先在MSDN中可以查看其函数细节,

    然后在根据其要求的参数进行复杂的设置。
          在.NET时代,MS封装了这些麻烦的细节,开发者可以很容易的实现托盘程序的控制和操作。现以简单的实例为例来说明:
          1.添加notifyIcon控件和contextMenuStrip控件
          2.设置其属性icon和contextMenuStrp属性,Icon属性只需选择一个托盘图标,contextMenuStrip用于关联第一步的快捷菜单。
          3.添加窗体的SizeChanged事件程序,用于实现窗体最小化时调用托盘:
                if (this.WindowState == FormWindowState.Minimized)
                {
                    //this.Hide();        //可以要,也可以不要,取决于是否隐藏主窗体

          //隐藏任务栏区图标

           this.ShowInTaskbar = false;
                    this.notifyIcon.Visible = true;
                }
           4.添加notifyIcon的Click事件,打开快捷菜单项,或者其他更复杂的操作选项,根据需要而定。    

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace TimeAssist
    11 {
    12     public partial class Form1 : Form
    13     {
    14         public Form1()
    15         {
    16             InitializeComponent();
    17             //托盘区图标隐藏 
    18             notifyIcon.Visible = false;
    19         }
    20 
    21         private void Form1_SizeChanged(object sender, EventArgs e)
    22         {
    23             if (this.WindowState == FormWindowState.Minimized)
    24             {
    25                 //this.Hide();        //可以要,也可以不要,取决于是否隐藏主窗体
    26                 //隐藏任务栏区图标
    27                 this.ShowInTaskbar = false;
    28                 //图标显示在托盘区
    29                 notifyIcon.Visible = true;
    30             }
    31         }
    32 
    33         private void notifyIcon_DoubleClick(object sender, EventArgs e)
    34         {
    35             showMainWindow();
    36         }
    37 
    38         private void showMainWindow()
    39         {
    40             //判断是否已经最小化于托盘 
    41             if (WindowState == FormWindowState.Minimized)
    42             {
    43                 //还原窗体显示 
    44                 WindowState = FormWindowState.Normal;
    45 
    46                 //激活窗体并给予它焦点 
    47                 this.Activate();
    48                 //任务栏区显示图标 
    49                 this.ShowInTaskbar = true;
    50                 //托盘区图标隐藏 
    51                 notifyIcon.Visible = false;
    52             }
    53         }
    54 
    55         private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    56         {
    57             Application.Exit();
    58         }
    59 
    60         private void showMainWindowToolStripMenuItem_Click(object sender, EventArgs e)
    61         {
    62             showMainWindow();
    63         }
    64 
    65         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    66         {
    67             // 取消关闭窗体
    68             e.Cancel = true;
    69 
    70             // 将窗体变为最小化
    71             this.WindowState = FormWindowState.Minimized;
    72         }
    73     }
    74 }

    原文:http://www.cnblogs.com/wuxiangbing/articles/1885483.html

  • 相关阅读:
    SSL证书的生成方法
    某些系统文件破坏后的修复方式
    dd命令的使用简介
    浅谈访问控制列表(ACL)
    发送端usleep(900)单线程带宽
    1024个读出线程的测试结果
    寻找ROS取数的瓶颈:思路整理(2)
    ROS:32个接收进程的接收带宽
    ROS: 将接收端的接收函数注释掉,TCP只发送,不接受数据时的recv-Q和send-Q长度实验
    ROS:16个接收进程的接收带宽
  • 原文地址:https://www.cnblogs.com/yasepix/p/4809420.html
Copyright © 2011-2022 走看看