自定义托盘图标通知气球

时间:2012-03-08 19:22:07

标签: c# winforms system-tray trayicon

我有一个C#程序,它位于系统托盘中,然后立即弹出通知气球。我想在通知气球上提供2-3个按钮,以允许用户在通知出现时采取各种操作 - 而不是,例如,必须单击通知气球才能显示表单包含每个可能操作的按钮。

我正在寻找有关实施此方法的最佳方法的建议。

编辑:澄清,我想在通知气球上提供按钮,以便用户可以直接对通知采取行动,而不必通过应用程序的其他部分(例如表单或菜单)采取行动。

2 个答案:

答案 0 :(得分:1)

没有内置的方法。我建议编写自己的“气球”并激活它而不是调用.ShowBalloon()

答案 1 :(得分:-1)

我就是这样做的。这可能不是正确的做法。我是这样做的,因为.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;
    }