Winform中如何修改notifyicon的tooltipicon并添加自定义图标?
Winform NotifyIcon 自定义图标解决方案
你当前使用的ShowBalloonTip方法第四个参数为ToolTipIcon枚举,仅支持系统预设的无图标、信息、警告、错误四种图标,要实现自定义图标需求可参考以下方案:
1. 修改托盘区域NotifyIcon本身的显示图标
直接修改Icon属性即可,示例代码:
// 替换为你自己的图标资源,建议使用ico格式 notifyIcon1.Icon = Properties.Resources.自定义托盘图标;
如果需要修改鼠标悬停在托盘图标上的提示文字,修改Text属性即可,最多支持63个字符:
notifyIcon1.Text = "自定义提示文字";
2. 气泡提示使用自定义图标
方案A:.NET Core 3.0+ / .NET 5+ 版本(内置支持)
高版本.NET Winform的NotifyIcon已内置自定义气泡图标属性,直接调用即可:
// 先指定自定义气泡图标 notifyIcon1.CustomBalloonIcon = Properties.Resources.自定义气泡图标; // 调用ShowBalloonTip时第四个参数必须传ToolTipIcon.None,否则系统默认图标会覆盖自定义图标 notifyIcon1.ShowBalloonTip(3000, "Message", "The File has been successfully uploaded!!", ToolTipIcon.None);
方案B:.NET Framework 全版本兼容(调用Win32 API实现)
.NET Framework无内置自定义气泡图标属性,需要调用系统API实现:
- 首先在窗体类中导入API声明:
using System.Runtime.InteropServices; using System.Drawing; [StructLayout(LayoutKind.Sequential)] public struct NOTIFYICONDATA { public int cbSize; public IntPtr hWnd; public int uID; public int uFlags; public int uCallbackMessage; public IntPtr hIcon; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szTip; public int dwState; public int dwStateMask; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szInfo; public int uTimeoutOrVersion; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string szInfoTitle; public int dwInfoFlags; public Guid guidItem; public IntPtr hBalloonIcon; } [DllImport("shell32.dll", CharSet = CharSet.Auto)] public static extern bool Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA lpData); public const int NIM_MODIFY = 0x00000001; public const int NIF_INFO = 0x00000010; public const int NIIF_USER = 0x00000004;
- 封装自定义气泡调用方法:
public void ShowCustomBalloonTip(int timeout, string title, string content, Icon customIcon) { NOTIFYICONDATA nid = new NOTIFYICONDATA(); nid.cbSize = Marshal.SizeOf(nid); nid.hWnd = notifyIcon1.ContainerControl.Handle; nid.uID = 1; // 与NotifyIcon默认uID保持一致即可 nid.uFlags = NIF_INFO; nid.szInfo = content; nid.szInfoTitle = title; nid.uTimeoutOrVersion = timeout; nid.dwInfoFlags = NIIF_USER; nid.hBalloonIcon = customIcon.Handle; Shell_NotifyIcon(NIM_MODIFY, ref nid); }
- 直接调用即可:
ShowCustomBalloonTip(3000, "Message", "The File has been successfully uploaded!!", Properties.Resources.自定义气泡图标);
注意事项
- 自定义图标建议使用32x32像素的.ico格式文件,避免显示模糊
- 部分Windows版本会限制应用通知权限,如果气泡不显示可先检查系统通知设置是否允许当前应用发送通知
内容的提问来源于stack exchange,提问作者HiSura
相关产品推荐
相关产品推荐

