WinForm实现最小化到系统托盘方法实例详解

下面我就详细讲解一下如何实现WinForm最小化到系统托盘。

什么是系统托盘?

系统托盘,又称通知区域(Notification Area),是Windows操作系统中任务栏右侧的一块区域,用于显示系统通知、状态图标等。

WinForm如何最小化到系统托盘?

WinForm的默认最小化行为是最小化到任务栏,但我们可以通过编程实现将WinForm最小化到系统托盘。具体步骤如下:

  1. 在WinForm窗口中添加NotifyIcon控件,用于在系统托盘中显示图标和鼠标提示信息。

csharp
// 声明NotifyIcon控件
private NotifyIcon notifyIcon;
// 初始化NotifyIcon控件
notifyIcon = new NotifyIcon();
notifyIcon.Icon = this.Icon; // 设置图标
notifyIcon.Text = "WinForm最小化到系统托盘"; // 设置鼠标提示信息
notifyIcon.Visible = true; // 显示NotifyIcon控件

  1. 注册窗口最小化事件,当窗口最小化时,将WinForm隐藏并显示NotifyIcon控件。

csharp
// 注册窗口最小化事件
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide(); // 隐藏WinForm窗口
notifyIcon.ShowBalloonTip(1000); // 显示鼠标提示信息
}
}

  1. 注册NotifyIcon控件鼠标双击事件,当用户双击NotifyIcon控件时,将WinForm还原并显示。

csharp
// 注册NotifyIcon控件鼠标双击事件
private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show(); // 显示WinForm窗口
this.WindowState = FormWindowState.Normal; // 还原窗口
}

示例说明

示例1

我们假设一个简单的WinForm应用程序,里面有一个按钮控件和一个文本框控件。当用户点击按钮后,文本框会显示一段提示信息。

现在我们要将这个应用程序最小化到系统托盘,当用户双击托盘图标时,将应用程序还原并显示。

实现方法如下:

  1. 在WinForm窗口中添加NotifyIcon控件。

csharp
// 声明NotifyIcon控件
private NotifyIcon notifyIcon;
// 初始化NotifyIcon控件
notifyIcon = new NotifyIcon();
notifyIcon.Icon = this.Icon; // 设置图标
notifyIcon.Text = "最小化到系统托盘"; // 设置鼠标提示信息
notifyIcon.Visible = true; // 显示NotifyIcon控件

  1. 注册窗口最小化事件,将WinForm隐藏并显示NotifyIcon控件。

csharp
// 注册窗口最小化事件
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide(); // 隐藏WinForm窗口
notifyIcon.ShowBalloonTip(1000); // 显示鼠标提示信息
}
}

  1. 注册NotifyIcon控件鼠标双击事件,将应用程序还原并显示。

csharp
// 注册NotifyIcon控件鼠标双击事件
private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show(); // 显示WinForm窗口
this.WindowState = FormWindowState.Normal; // 还原窗口
}

现在,当用户点击按钮后,文本框会显示提示信息。当用户将窗口最小化时,应用程序会隐藏,显示托盘图标。当用户双击托盘图标时,应用程序会还原并显示。

示例2

现在我们想要在应用程序最小化到系统托盘时,弹出一个菜单,包含一些操作项,例如退出应用程序、显示主窗口等。

实现方法如下:

  1. 在WinForm窗口中添加ContextMenu控件,用于在系统托盘中显示弹出菜单。

csharp
// 声明ContextMenu控件
private ContextMenu contextMenu;
// 初始化ContextMenu控件
contextMenu = new ContextMenu();
contextMenu.MenuItems.Add("退出应用程序", (s, e) => { Application.Exit(); }); // 添加退出应用程序操作项
contextMenu.MenuItems.Add("显示主窗口", (s, e) => { this.Show(); this.WindowState = FormWindowState.Normal; }); // 添加显示主窗口操作项

  1. 在NotifyIcon控件的鼠标右键事件中显示弹出菜单。

csharp
// 注册NotifyIcon控件鼠标右键事件
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenu.Show(this, new Point(e.X, e.Y)); // 在鼠标位置处显示ContextMenu控件
}
}

现在,当用户将应用程序最小化到系统托盘时,可以通过右键单击托盘图标,弹出菜单,进行操作。例如,退出应用程序、显示主窗口等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:WinForm实现最小化到系统托盘方法实例详解 - Python技术站

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

相关文章

  • C# 拷贝数组的几种方法(总结)

    当我们在使用 C# 编程语言时,时常需要对数组进行复制和拷贝。为了更好的理解 C# 拷贝数组的几种方法,本文对常用的拷贝数组方法进行了总结,并提供了示例代码以加深理解。 一、使用Array.Copy()方法拷贝数组 方法介绍 Array.Copy() 方法可以将一个数组中的元素复制到另一个数组中。该方法需要传入源数组、目标数组、以及要复制的元素数量。 pub…

    C# 2023年6月7日
    00
  • 轻松学习C#的String类

    轻松学习C#的String类 在C#中,我们经常使用String类来处理字符串。它提供了一系列的方法来处理字符串,使我们的编程工作更加方便和高效。下面是一些学习 String 类的攻略,希望你能从中受益。 创建字符串 在C#中,创建字符串的方法有多种。下面介绍一些常用的方式。 直接赋值 使用字符串字面量来直接赋值字符串。 string str1 = &quo…

    C# 2023年5月15日
    00
  • C++中const的实现细节介绍(C,C#同理)

    下面是关于C++中const的实现细节介绍的完整攻略。 const的含义和作用 C++中的const常量表示一个不可改变的变量,即该变量的值不允许被修改。const常量通常用于定义程序中不会改变的数据,例如PI的值。const的作用相当于定义了一个只读的变量。 const的定义和初始化 const常量可以在定义时被初始化,也可以在后面进行初始化。 定义时初始…

    C# 2023年5月14日
    00
  • C# 获取数据库中所有表名、列名的示例代码

    下面是关于“C# 获取数据库中所有表名、列名的示例代码”的完整攻略,以及两条示例说明。 攻略 获取数据库中所有表名、列名可以利用C#中的数据库元数据操作。可通过ADO.NET提供的DbConnection或DbDataReader对象访问元数据,其方法包括GetSchema等。这些方法可以获取关于数据库架构的信息。 下面是获取MySQL数据库中所有表名的示例…

    C# 2023年5月31日
    00
  • C#中Ilist与list的区别小结

    C#中IList与List的区别小结 在C#中,IList与List是两个常用的接口和类。他们有一些共性,也有一些细微的区别。 IList IList接口定义了一个表示非泛型列表的对象的协定。它派生自ICollection接口并在其基础上添加了一些访问列表中元素的方法,如索引器和插入/删除等操作。IList支持在列表中插入、删除和访问元素的方法。他的定义如下…

    C# 2023年6月7日
    00
  • C#窗体间通讯处理的几种方法总结

    下面是详细讲解“C#窗体间通讯处理的几种方法总结”的完整攻略: 1. 前言 在C# Winform开发中,窗体间的信息传递是非常常见的需求。本文将对多个C#窗体间通信的方式进行总结,并给出相关示例说明。 2. 使用公共变量进行通信 公共变量指的是在应用程序的整个生命周期中都可用的变量。通过在窗体间共用这些变量可以实现窗体间的数据共享。 示例说明: // 定义…

    C# 2023年6月1日
    00
  • Entity Framework配置关系

    Entity Framework是一种ORM(对象关系映射)框架,可以帮助开发人员将数据库中的表和列转换为.NET对象和属性。 在Entity Framework中,关系也很重要。此文将介绍如何在Entity Framework中配置关系。 配置一对一关系 一对一关系是指两个实体之间的一种关系,其中每个实体只能拥有一个关联实体。这种关系可以使用以下步骤进行配…

    C# 2023年6月3日
    00
  • 详解ASP.NET Core实现强类型Configuration读取配置数据

    在 ASP.NET Core 中,可以使用强类型 Configuration 来读取配置数据。强类型 Configuration 可以将配置数据映射到 C# 类型中,方便使用和管理。以下是详解 ASP.NET Core 实现强类型 Configuration 读取配置数据的完整攻略: 步骤一:定义配置类 在 ASP.NET Core 项目中,需要定义一个 C…

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