Я создал приложение для лотка в .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;
}
Где я могу добавить таймер - в контексте? Пользователи могут не открывать форму, поэтому добавление таймера в форму может не работать все время. Как изменить значок?
Просто измените свойство Icon, не может быть проще и понятнее. –