2015-10-13 4 views
3

Я создал приложение для лотка в .Net, которое отлично работает. Тем не менее, пользователи хотят изменить изображение значка лотка во время выполнения на определенных условиях. Чтобы сделать его простым, скажем, что-то не работает - значок Tray должен показывать красное изображение; если все в порядке, оно должно показать зеленый цвет. Я не уверен, как это сделать в .Net.Изменение значка в системном лотке Изображение

Просьба указать некоторые данные по этому вопросу. Спасибо

Я построил CustomApplicationContent для лотка. Некоторые фрагменты кода ниже:

Program.cs

[STAThread] 
    static void Main() 
    { 
     if (!SingleInstance.Start()) { return; } 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     try 
     { 
      var applicationContext = new CustomApplicationContext(); 
      Application.Run(applicationContext); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Program Terminated Unexpectedly", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     SingleInstance.Stop(); 
    } 

CustomApplicationContext.cs

public class CustomApplicationContext : ApplicationContext 
{ 
    private System.ComponentModel.IContainer components; // a list of components to dispose when the context is disposed 
    private NotifyIcon notifyIcon; 
    private static readonly string IconFileName = "green.ico"; 
    private static readonly string DefaultTooltip = "Employee Management System"; 
    private readonly TrayManager trayManager; 

    public CustomApplicationContext() 
    { 
     InitializeContext(); 
     trayManager = new TrayManager(notifyIcon); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing && components != null) { components.Dispose(); } 
    } 


    private void InitializeContext() 
    { 
     components = new System.ComponentModel.Container(); 
     notifyIcon = new NotifyIcon(components) 
     { 
      ContextMenuStrip = new ContextMenuStrip(), 
      Icon = new Icon(IconFileName), 
      Text = DefaultTooltip, 
      Visible = true 
     }; 
     notifyIcon.ContextMenuStrip.Opening += ContextMenuStrip_Opening; 
     notifyIcon.DoubleClick += notifyIcon_DoubleClick; 
     //notifyIcon.MouseUp += notifyIcon_MouseUp; 
    } 
private void notifyIcon_DoubleClick(object sender, EventArgs e) 
    { 
     ShowAboutForm(); 
    } 
private TestForm testForm; 

    private void ShowAboutForm() 
    { 
     if (testForm == null) 
     { 
      testForm = new TestForm { trayManager = trayManager }; 
      testForm.Closed += testForm_Closed; ; // avoid reshowing a disposed form 
      testForm.Show(); 
     } 
     else { testForm.Activate(); } 
    } 


    void testForm_Closed(object sender, EventArgs e) 
    { 
     testForm = null; 
    } 

Где я могу добавить таймер - в контексте? Пользователи могут не открывать форму, поэтому добавление таймера в форму может не работать все время. Как изменить значок?

+0

Просто измените свойство Icon, не может быть проще и понятнее. –

ответ

6

Я бы сделать ваши иконки Embedded Ресурсы, а затем использовать код, как это изменить в данный момент отображается один во время выполнения:

notifyIcon.Icon = new Icon(this.GetType(), "red.ico"); 
+0

Хотя ваше решение полностью в порядке, я думаю, что использование 'Resource.resx' более дружелюбное :) +1 –

7

Вы можете добавить 2 иконки в Resource.resx файл вашего проекта, Red.ico и Green.ico и использовать их таким образом в различных ситуациях:

this.notifyIcon1.Icon = Properties.Resources.Red; 

или

this.notifyIcon1.Icon = Properties.Resources.Green; 

Чтобы добавить иконки Resourse.resx, Open Resources.resx из Properties папки вашего project.then Из первого раскрывающегося списка на панели инструментов конструктора, выберите Icons, и из следующего выпадающего списка выберите Add Existing File... и добавлять файлы значков. Вы также можете переименовать элементы здесь.

enter image description here enter image description here

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

  • Нет связанных вопросов^_^