写过一个程序,要求在程序启动的时候主窗口隐藏,只在系统托盘里显示一个图标。一直以来采用的方法都是设置窗口的ShowInTaskBar=false, WindowState=Minimized。但是偶然发现尽管这样的方法可以使主窗口隐藏不见,但是在用Alt+Tab的时候却可以看见这个程序的图标并把这个窗口显示出来。因此这种方法其实并不能满足要求。

经过研究,又找到两个方法。

方法一: 重写setVisibleCore方法

protected   override   void  SetVisibleCore( bool  value)
{
      base .SetVisibleCore( false );
}

这个方法比较简单,但是使用了这个方法后主窗口就再也不能被显示出来,而且在退出程序的时候也必须调用Application.Exit方法而不是Close方法。这样的话就要考虑一下,要把主窗口的很多功能放到其他的地方去。

方法二: 不创建主窗口,直接创建NotifyIcon和ContextMenu组件
这种方法比较麻烦,很多代码都必须手工写

static   void  Main()
 {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );

System.Resources.ResourceManager resources  =  
                 new  System.Resources.ResourceManager( " myResource " ,  System.Reflection.Assembly.GetExecutingAssembly());
            NotifyIcon ni  =   new  NotifyIcon();

ni.BalloonTipIcon  =  System.Windows.Forms.ToolTipIcon.Warning;
            ni.BalloonTipText  =   "test ! " ;
            ni.BalloonTipTitle  =   " test. " ;
             // ni.ContextMenuStrip = contextMenu;
            ni.Icon  =  ((System.Drawing.Icon)(resources.GetObject( " ni.Icon " )));
            ni.Text  =  "Test " ;
            ni.Visible  =   true ;
            ni.MouseClick  +=   delegate ( object  sender, MouseEventArgs e)
            {
                ni.ShowBalloonTip( 0 );
            };

Application.Run();
}

如果需要的组件太多,这个方法就很繁琐,因此只是做为一种可行性研究。

方法三:前面两种方法都有一个问题,主窗口不能再显示出来。现在这种方法就没有这个问题了

private   bool  windowCreate = true ;
...
protected   override   void  OnActivated(EventArgs e) 
        { 
             if  (windowCreate) 
            { 
                 base .Visible  =   false ;
                windowCreate  =   false ;
            }

base .OnActivated(e); 
        }

private   void  notifyIcon1_DoubleClick( object  sender, EventArgs e)
        {
             if  ( this .Visible  ==   true )
            {
                 this .Hide();
                 this .ShowInTaskbar  =   false ;
            }
             else
            {
                 this .Visible  =   true ;
                 this .ShowInTaskbar  =   true ;
                 this .WindowState  =  FormWindowState.Normal;
                 // this.Show();
                 this .BringToFront();
            }

}

在C#隐藏主窗口的几种方法相关推荐

  1. 2.实验室打卡精灵2.0-单实例化、开机启动、托盘操作、程序启动时隐藏主窗口

    老规矩,上一张图片 最近对实验室打卡精灵做了一些优化,基本上达到了最初设想的功能. 现在的功能包括: 1.自定义早上.中午.下午.晚上的打卡时间 2.软件单实例化,即如果已经运行了一次再次运行会弹出& ...

  2. VC按最小化、关闭按钮、Esc都隐藏主窗口

    VC按最小化.关闭按钮.Esc键都隐藏主窗口,在托盘处程序图标的右键菜单中点击,显示主窗口. 1. 按最小化时隐藏主窗口:为窗口添加WM_SIZE消息响应函数 void CdDlg::OnSize(U ...

  3. PyQt5子窗口开启后锁定或隐藏主窗口

    PyQt5子窗口开启后锁定或隐藏主窗口 老规矩,先放图 锁定主窗口 隐藏主窗口 实现 实现方式非常简单与C++方式基本相同 在主界面UI初始化时把按钮信号与拉起窗口的槽函数绑定,这里我的按钮为sele ...

  4. winform7、(c#) 窗口启动时隐藏主窗口

    winform7.(c#) 窗口启动时隐藏主窗口 隐藏窗口用的是this.Hide();,但是在主窗口构造函数里使用并不生效. 让C#让窗体在启动时直接隐藏最完美的解决办法,不闪烁.思路为:首先将窗体 ...

  5. linux与w7之间的切换,w7系统切换窗口怎么操作_教你w7系统切换窗口的几种方法

    在我我们的日常学习和工作中,为了方便我们能够快速的进行操作,通常都会使用切换窗口的方式来解决,这样既方便又节省时间.可是对于一些win7新用户来说,却不知道如何操作切换窗口的功能,对此,小编就在这里简 ...

  6. oracle绑定主键,oracle添加主键的四种方法:

    oracle添加主键的四种方法: 列级,表级建立主键 drop table constraint_test; 1.create table constraint_test ( name_id numb ...

  7. js设置控件的隐藏与显示的两种方法

    js设置控件的隐藏与显示的两种方法: js设置控件的隐藏与显示,设置控件style的display和visibility属性就可以了. 用JavaScript隐藏控件的方法有两种,分别是通过设置控件的 ...

  8. 【Axure交互教程】 隐藏页面滚动条的3种方法

    作品名称:隐藏页面滚动条的3种方法 作品编号:Case001 软件版本:Axure9 作品类型:交互案例 原型预览链接(附源文件下载链接):http://daisyaxure.com/demo/Cas ...

  9. jquery控制元素的隐藏和显示的几种方法。

    使用jquery控制div的显示与隐藏,一句话就能搞定,例如: 1.$("#id").show()表示为display:block, $("#id").hide ...

最新文章

  1. 每日一皮:当我在重构时,总是有惊喜出现.......
  2. p750tm安装linux系统,Android 开发环境(虚拟机,LINUX, secureCRT)安装过程.pdf
  3. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...
  4. [杭电ACM]1012u Calculate e
  5. 释放广域网潜能的“简单”之道
  6. “洞察千里”,华为云HiLens如何让无人车智行天下
  7. 自己组装服务器计算机,深度学习服务器组装经验过程分享
  8. Android Studio中 no module 问题,解决方法
  9. Linux web服务与HTTP协议基础概念
  10. 书籍推荐《区块链技术指南》
  11. python自动化运维快速入门 pdf 郑征_Python自动化运维快速入门
  12. lpush rpush 区别_php-redis中文参考手册_list容器相关_lPush_rPush_lPushx_rPu...
  13. CHM转换PDF好轻松
  14. IDC中国政府行业IT市场2013年10大预测:新型城镇化和第三平台技术推进政府信息化建设
  15. win7休眠不断网的设置方法
  16. I Love ces(大小写字母转换 金马五校赛-上海大学)
  17. python报KeyError: ('Age', 'occurred at index PassengerId')错误
  18. 如何在线无痕去除图片水印
  19. 怎么通过Unity使用Vulkan API 移动端Vulkan GPU 大PK
  20. D. Nearest Excluded Points(cf)坐标反向BFS

热门文章

  1. 非计算机专业考计算机三级难吗,经验之谈:怎样通过计算机等级考试三级考试...
  2. 普罗米修斯Prometheus+Grafana,监控搭建与界面基础配置
  3. Matlab论文插图绘制模板第32期—等高线图(contour)
  4. @Autowried注入方式
  5. 第8关:判断条件的相容性
  6. WebStorm V5.0破解版含注册码
  7. 计算机应用专业成绩汇总表,计算机应用基础第7章Excel综合应用1—成绩表统计与分析.ppt...
  8. 迁移学习笔记4:ACML-Sinno Jialin Pan
  9. eclipse 显示 空格 .回车符号,去掉相应的符号
  10. position有几种属性?