Пользовательский значок уведомлений в трее - PullRequest
1 голос
/ 08 марта 2012

У меня есть программа на C #, которая сидит в системном трее и время от времени выдает всплывающее уведомление.Я хотел бы предоставить 2-3 кнопки на всплывающей подсказке , чтобы позволить пользователю выполнять различные действия при появлении уведомления - вместо того, чтобы, например, нажимать на всплывающую подсказку для отображения формы, содержащейкнопки для каждого возможного действия.

Я ищу предложения о наилучшем способе реализации этого.

Редактировать: уточнение, я хочу предоставить кнопки на всплывающем уведомлении, чтобы пользовательможет выполнять прямые действия с уведомлением, а не выполнять какие-либо действия через какую-либо другую часть приложения (например, форму или меню).

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Для этого нет встроенного метода.Я бы предложил написать свой собственный «шарик» и активировать его вместо вызова .ShowBalloon ()

0 голосов
/ 08 марта 2012

Вот как я это делаю.Это может быть неправильный способ сделать это.Я делаю так, потому что .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;
    }
...