自定义托盘图标通知气球
本文关键字:气球 通知 托盘图标 自定义 | 更新日期: 2023-09-27 18:27:15
我有一个C#程序,它位于系统托盘中,不时弹出一个通知气球。我想在通知气球上提供2-3个按钮,以允许用户在通知出现时采取各种行动,而不是,例如,必须单击通知气球来显示包含每个可能行动按钮的表单。
我正在寻找关于实现这一目标的最佳方式的建议。
编辑:澄清一下,我想在通知气球上提供按钮,这样用户就可以对通知采取直接行动,而不必通过应用程序的其他部分(例如表单或菜单)采取行动。
没有内置的方法。我建议您编写自己的"气球"并激活它,而不是调用.ShowBalloon()
我就是这样做的。这可能不是正确的方法。我这样做是因为.ShowBalloonTip(i)
对我来说没有按预期工作。它不会停留i
秒就熄灭。所以我在另一个线程中这样做,并强制处理掉。
private static NotifyIcon _notifyIcon;
//you can call this public function
internal static void ShowBalloonTip(Icon icon)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(icon);
}
private static void worker_DoWork(object sender, DoWorkEventArgs e)
{
Show(e);
Thread.Sleep(2000); //meaning it displays for 2 seconds
DisposeOff();
}
private static void Show(DoWorkEventArgs e)
{
_notifyIcon = new NotifyIcon();
_notifyIcon.Icon = (Icon)e.Argument;
_notifyIcon.BalloonTipTitle = "Environment file is opened";
_notifyIcon.BalloonTipText = "Press alt+tab to switch between environment files";
_notifyIcon.BalloonTipIcon = ToolTipIcon.Info;
_notifyIcon.Visible = true;
_notifyIcon.ShowBalloonTip(2000); //sadly doesnt work for me :(
}
private static void DisposeOff()
{
if (_notifyIcon == null)
return;
_notifyIcon.Dispose();
_notifyIcon = null;
}