У меня есть Winform, который изначально скрыт при запуске.
После этого пользователь может щелкнуть значок уведомления внизу и показать его, если он хочет, а когда он свернут, ему нужно вернуться в системный трей.
В трее запускается нормально - без проблем. Когда нажимаешь показать, первый раз хоть и появляется, потом на долю секунды как будто исчезает, потом возвращается. Так что, похоже, он немного мерцает.
Затем, когда вы сворачиваете его, он попадает в системный трей, как и должно быть, и это нормально. Однако, когда вы нажимаете, чтобы показать его снова (в любое время после того, как вы сделали это один раз), он как бы скользит либо из системного трея, либо из панели задач, я бы предпочел, чтобы он просто появлялся, без небольшой анимации.
public class Program : Form
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Program());
}
private NotifyIcon trayIcon;
private ContextMenu trayMenu;
public Program()
{
trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Exit", OnExit);
trayMenu.MenuItems.Add("Show", OnShow);
trayIcon = new NotifyIcon();
trayIcon.Text = "MyTrayApp";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
trayIcon.ContextMenu = trayMenu;
trayIcon.Visible = true;
}
protected override void OnLoad(EventArgs e)
{
Visible = false;
ShowInTaskbar = false;
base.OnLoad(e);
}
protected override void OnResize(EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
Visible = false;
ShowInTaskbar = false;
}
base.OnResize(e);
}
private void OnExit(object sender, EventArgs e)
{
Application.Exit();
}
private void OnShow(object sender, EventArgs e)
{
Visible = true;
ShowInTaskbar = true;
TopMost = true;
WindowState = FormWindowState.Normal;
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
trayIcon.Dispose();
}
base.Dispose(isDisposing);
}
}
Любые указатели на то, как просто заставить его отображаться правильно, будут действительно оценены.
Обновить
Я нашел причину мерцания, это произошло, когда TopMost
был установлен последним, после того, как он был показан, поэтому он перерисовывает его поверх, что имеет смысл.
Так что в нынешнем виде он просто появляется и исчезает без анимации.