2012-03-08 2 views
1

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

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

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

ответ

1

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

+0

Принято. Я подумал, что было бы довольно легко добавить кнопки в воздушный шар с уведомлением, но, похоже, было бы намного проще создать собственный воздушный шар с уведомлением. Спасибо :-) – user1232867

+2

Да, конечно было бы неплохо, если бы он был встроен. Mebe Windows 3147 будет включать его :) –

-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; 
    } 
+4

«Он не остается на секунду и уходит». - это не предполагается. Он должен исчезнуть через миллисекунды после следующего действия пользователя, где у меня есть системный минимум. Идея состоит в том, что если вы представляете уведомление, которое должен видеть пользователь, вы должны дать пользователю возможность его увидеть. Что, если он выпьет? И если вы скажете, что тогда не имеет значения, что он не видит уведомления, вы не должны были показывать уведомление в первую очередь, это не то, для чего они предназначены. – hvd

+0

@hvd для меня это новое. Спасибо за совет. –

+0

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

Смежные вопросы