C#怎样才能实现窗体最小化到托盘呢?

要实现C#窗体最小化到托盘,需要以下几步:

1.添加命名空间

需要添加System.Windows.Forms命名空间来使用NotifyIcon类。

using System.Windows.Forms;

2.创建NotifyIcon对象

在窗体类中定义一个NotifyIcon对象,用来实现窗体最小化后显示在系统托盘中。

private System.Windows.Forms.NotifyIcon notifyIcon1;

在窗体的构造函数中初始化NotifyIcon对象并添加鼠标事件处理方法。

public Form1()
{
    InitializeComponent();
    notifyIcon1 = new System.Windows.Forms.NotifyIcon();
    notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
    notifyIcon1.BalloonTipText = "应用已最小化到托盘";
    notifyIcon1.BalloonTipTitle = "提示";
    notifyIcon1.Icon = this.Icon;
    notifyIcon1.Text = "应用名称";
    notifyIcon1.Visible = true;
    notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
}

在鼠标双击事件处理方法中实现最小化到托盘的功能。首先将窗体隐藏,并显示系统托盘图标上的提示信息。然后设置图标左键单击事件的处理方法并将图标显示在系统托盘中。

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        this.Show();
        this.WindowState = FormWindowState.Normal;
    }
    else
    {
        this.WindowState = FormWindowState.Minimized;
        this.Hide();
        notifyIcon1.ShowBalloonTip(1000);
        notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
    }
}

3.设置窗体关闭事件

设置窗体关闭事件处理方法,实现在窗体关闭前隐藏到系统托盘中。在窗体关闭事件处理方法中需要将双击图标事件处理方法和左键单击图标事件处理方法从NotifyIcon对象的MouseDoubleClick和MouseClick事件中移除,否则在图标上单击会重复打开窗体。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    notifyIcon1.Visible = false;
    notifyIcon1.MouseDoubleClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
    notifyIcon1.MouseClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
}

下面是完整的示例代码:

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private System.Windows.Forms.NotifyIcon notifyIcon1;

        public Form1()
        {
            InitializeComponent();
            notifyIcon1 = new System.Windows.Forms.NotifyIcon();
            notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
            notifyIcon1.BalloonTipText = "应用已最小化到托盘";
            notifyIcon1.BalloonTipTitle = "提示";
            notifyIcon1.Icon = this.Icon;
            notifyIcon1.Text = "应用名称";
            notifyIcon1.Visible = true;
            notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            notifyIcon1.Visible = false;
            notifyIcon1.MouseDoubleClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
            notifyIcon1.MouseClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
            }
            else
            {
                this.WindowState = FormWindowState.Minimized;
                this.Hide();
                notifyIcon1.ShowBalloonTip(1000);
                notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
            }
        }

        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Show();
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.MouseClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
            }
        }
    }
}

示例1:

public Form1()
{
    InitializeComponent();
    notifyIcon1 = new System.Windows.Forms.NotifyIcon();
    notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
    notifyIcon1.BalloonTipText = "应用已最小化到托盘";
    notifyIcon1.BalloonTipTitle = "提示";
    notifyIcon1.Icon = this.Icon;
    notifyIcon1.Text = "应用名称";
    notifyIcon1.Visible = true;
    notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
}

在以上示例中,创建了NotifyIcon对象,设置了提示信息、图标以及鼠标双击事件处理方法。当双击图标时,在窗体最小化到托盘前会执行Show、WindowState和Hide方法,并显示提示信息。

示例2:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    notifyIcon1.Visible = false;
    notifyIcon1.MouseDoubleClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
    notifyIcon1.MouseClick -= new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
}

在以上示例中,实现了窗体关闭前隐藏到托盘中的功能,在窗体关闭事件处理方法中移除了双击图标事件处理方法和左键单击图标事件处理方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#怎样才能实现窗体最小化到托盘呢? - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • C# String.Contains()方法: 检查字符串是否包含指定的子字符串

    C#中String.Contains()的作用与使用方法 在C#中,String.Contains()是一个字符串方法,用于判断一个字符串是否包含指定的子字符串,如果包含则返回true,否则返回false。这个方法通常在字符串查找和替换中使用。 使用方法 String.Contains()方法的基本使用方法如下: string str = "Hel…

    C# 2023年4月19日
    00
  • 解决C#程序只允许运行一个实例的几种方法详解

    针对“解决C#程序只允许运行一个实例的几种方法详解”,这是一个常见的需求,我们可以通过以下几种方式来解决。 方法一:使用Mutex互斥量 互斥体是一种用于在进程之间进行同步的对象,也是实现单实例应用程序的首选方法之一。具体操作如下: 在Program.cs文件中创建一个Mutex对象。 static Mutex mutex = new Mutex(true,…

    C# 2023年6月7日
    00
  • WPF利用WindowChrome实现自定义窗口

    首先我们来详细讲解如何利用WindowChrome实现自定义窗口的完整攻略。 简介 WindowChrome 是 WPF 中的一个类,可以帮助我们自定义窗口视觉。通过 WindowChrome,可以自定义窗口的样式,改变标题栏和窗口边框的样式,甚至可以设置圆角窗口。 攻略 新建 WPF 项目,添加 Windows 项目 首先,我们需要新建一个空的 WPF 项…

    C# 2023年6月3日
    00
  • .NET Core中本地化机制的深入讲解

    .NET Core中本地化机制的深入讲解 在本攻略中,我们将详细讲解.NET Core中本地化机制的技术及工作原理,并提供两个示例说明。 什么是本地化? 本地化是指将应用程序适应不同的语言和文化习惯的过程。在.NET Core中,本地化通常包括以下内容: 翻译应用程序的用户界面元素,如按钮、标签、菜单等。 格式化日期、时间、货币等数据类型,以适应不同的文化习…

    C# 2023年5月16日
    00
  • 关于C#连接SQL Server时提示用户登录失败的解决方法

    下面就是关于C#连接SQLServer时提示用户登录失败的解决方法的完整攻略: 1. 检查用户名和密码是否正确 第一步,你应该检查你提供的用户名和密码是否正确。在C#中,利用SqlConnectionStringBuilder类创建连接字符串,其中包括用户名和密码信息。示例代码如下: SqlConnectionStringBuilder builder = …

    C# 2023年5月14日
    00
  • Vue.js与 ASP.NET Core 服务端渲染功能整合

    Vue.js与 ASP.NET Core 服务端渲染功能整合攻略 Vue.js是一个流行的JavaScript框架,它可以帮助我们构建交互式的Web应用程序。ASP.NET Core是一个跨平台的Web应用程序框架,它可以帮助我们构建高性能的Web应用程序。本攻略将详细介绍如何将Vue.js与ASP.NET Core服务端渲染功能整合。 环境要求 在进行Vu…

    C# 2023年5月17日
    00
  • 说说C#的async和await的具体用法

    下面是“说说C#的async和await的具体用法”的完整攻略: 一、async/await简介和作用 async和await是 C# 5.0 中引入的新语法糖,目的是让异步编程代码更加清晰和简洁。其作用主要有两个: 应对高并发:异步方法可以让 CPU 和 IO 操作并发执行,从而提高程序的吞吐量和响应性能。 简化代码:通过异步编程的语法糖,可以让异步代码的…

    C# 2023年6月6日
    00
  • asp.net(c#)下读取word文档的方法小结

    下面我将给出一个“asp.net(c#)下读取word文档的方法小结”的完整攻略,包含以下内容: 1. 了解Word文档的内部结构 要读取Word文档,首先需要了解Word文档的内部结构。当我们打开一个Word文档时,它实际上是一个包含许多不同元素(如段落、表格、图像等)的复合文档。Word文档的内部结构保存在其二进制格式(.doc)或OpenXML格式(.…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部