1

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

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

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

4

2 回答 2

1

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

于 2012-03-10T00:52:25.397 回答
-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;
    }
于 2012-03-08T19:28:35.757 回答