我有一个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是最后一次设置,在显示后,所以它重画它在顶部,这是有意义的。
所以现在,它只是让它在没有动画的情况下出现和消失。
发布于 2013-01-03 13:29:11
编辑:您应该只在Onload()中设置Onload()属性,只需使用Show()和Hide()来避免动画,并确保相应地更改WindowState。
我将您的代码放入常规的Form (而不是在Program.cs文件中),并删除了所有多余的代码。这是我的结果,它没有显示“双”动画。
public partial class Form1 : Form
{
private NotifyIcon trayIcon;
private ContextMenu trayMenu;
public Form1()
{
InitializeComponent();
this.ClientSize = new System.Drawing.Size(284, 262);
this.Name = "Program";
trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Exit");
trayMenu.MenuItems.Add("Show", FormShow);
trayIcon = new NotifyIcon();
trayIcon.Text = "MyTrayApp";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
trayIcon.ContextMenu = trayMenu;
trayIcon.Visible = true;
TopMost = true;
Resize += new EventHandler(Form1_Resize);
}
void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
ShowInTaskbar = false;
Hide();
trayIcon.Visible = true;
}
}
void FormShow(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
WindowState = FormWindowState.Normal;
}
ShowInTaskbar = true;
Show();
Focus();
trayIcon.Visible = false;
}
protected override void OnLoad(EventArgs e)
{
Visible = false;
ShowInTaskbar = false;
}
}https://stackoverflow.com/questions/14139576
复制相似问题