【问题标题】:Custom tray icon notification balloon自定义托盘图标通知气球
【发布时间】:2012-03-08 19:22:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# winforms system-tray trayicon


    【解决方案1】:

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

    【讨论】:

    • 接受。我认为将按钮添加到通知气球可能很容易,但似乎只创建一个自定义通知气球可能会容易得多。谢谢:-)
    • 是的,内置它当然很好。mebe Windows 3147 将包含它:)
    【解决方案2】:

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

    【讨论】:

    • "它不会停留 i 秒然后熄灭。" ——不应该。它应该在用户的下一个活动后消失 i 毫秒,其中我有一个特定于系统的最小值。这个想法是,如果您正在呈现用户应该看到的通知,您应该让用户有机会实际看到它。如果他出去喝酒怎么办?如果你说他没有看到通知也没关系,你不应该首先显示通知,那不是他们的目的。
    • @hvd 这对我来说是新的。感谢您的提示。
    • 抱歉,我的帖子不够清楚并已更新 - 我可以显示通知气球,但我希望允许用户直接通过气球采取几种可能的操作之一而不必点击表单或菜单来采取行动(即直接在通知气球上放置按钮)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多