最小化应用程序到系统托盘
我有一个由C#和Visual Studio 2010支持的Windows窗体应用程序。
如何将我的应用程序最小化到系统托盘(不是任务栏),然后在系统托盘中双击时将其还回来? 任何想法? 另外,我怎样才能在系统托盘中的图标做一些菜单,当我右键单击它,它会显示一个菜单,如login,断开连接,类似的东西。 另外,是否有任何方法显示像系统托盘popup的气球?
PS:我已经添加了一个notifyIcon,但我不知道如何使用它。
- C#系统托盘使用NotifyIcon最小化托盘
- 最小化窗口到系统托盘
处理窗体的Resize事件。 在此处理程序中,您将覆盖Resize事件的基本function,以使窗体最小化到系统托盘,而不是任务栏。 这可以通过在窗体的Resize事件处理程序中执行以下操作来完成:检查窗体的WindowState属性是否设置为FormWindowState.Minimized。 如果是,隐藏您的表单,启用NotifyIcon对象,并显示显示一些信息的气球提示。 一旦WindowState变为FormWindowState.Normal,通过将其Visible属性设置为false来禁用NotifyIcon对象。 现在,当双击任务栏中的NotifyIcon对象时,您希望窗口重新出现。 为此,处理NotifyIcon的MouseDoubleClick事件。 在这里,您使用Show()方法显示窗体。
private void frmMain_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized == this.WindowState) { mynotifyicon.Visible = true; mynotifyicon.ShowBalloonTip(500); this.Hide(); } else if (FormWindowState.Normal == this.WindowState) { mynotifyicon.Visible = false; } }
我发现这是为了完成整个解决scheme。 上面的答案无法从任务栏中删除窗口。
private void ImportStatusForm_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { notifyIcon.Visible = true; notifyIcon.ShowBalloonTip(3000); this.ShowInTaskbar = false; } } private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) { this.WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; notifyIcon.Visible = false; }
此外,使用表单devise器设置通知图标控件的以下属性也是很好的select。
this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't thing there is an error. this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]"; this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]"; this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
不要忘记添加图标文件到您的notifyIcon或它不会出现在托盘中。
我会一起去的
private void Form1_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized == this.WindowState) { notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(500); this.Hide(); } else if (FormWindowState.Normal == this.WindowState) { notifyIcon1.Visible = false; } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; }
尝试这个
private void Form1_Load(object sender, EventArgs e) { notifyIcon1.BalloonTipText = "Application Minimized."; notifyIcon1.BalloonTipTitle = "test"; } private void Form1_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { ShowInTaskbar = false; notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(1000); } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { ShowInTaskbar = true; notifyIcon1.Visible = false; WindowState = FormWindowState.Normal; }
这是我在我的应用程序中使用的方法,它非常简单,自我解释,但我很乐意提供更多的细节来回答您的意见。
public Form1() { InitializeComponent(); // When window state changed, trigger state update. this.Resize += SetMinimizeState; // When tray icon clicked, trigger window state change. systemTrayIcon.Click += ToggleMinimizeState; } // Toggle state between Normal and Minimized. private void ToggleMinimizeState(object sender, EventArgs e) { bool isMinimized = this.WindowState == FormWindowState.Minimized; this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized; } // Show/Hide window and tray icon to match window state. private void SetMinimizeState(object sender, EventArgs e) { bool isMinimized = this.WindowState == FormWindowState.Minimized; this.ShowInTaskbar = !isMinimized; systemTrayIcon.Visible = isMinimized; if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info); }
在系统托盘中点击图像,你可以validation帧是否可见,然后你必须设置Visible = true或false
…和右键单击通知菜单添加一个上下文菜单到窗体并编辑它,并通过双击设置每个上下文菜单项的鼠标点击事件,然后通过selectnotifyicon属性中的ContextMenuStrip将其附加到notifyicon1。