自定义托盘图标通知气球

本文关键字:气球 通知 托盘图标 自定义 | 更新日期: 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;
    }