【发布时间】:2012-06-29 22:26:28
【问题描述】:
此表单有一个 NotifyIcon 对象。当用户单击关闭按钮时,我希望表单不关闭而是不可见。然后,如果用户想再次查看表单,他可以双击系统托盘中的图标。如果用户想关闭表单,可以右击图标,选择“关闭”。
谁能告诉我如何让关闭按钮不关闭表单而是让它不可见?
(或者如果有人能想出更好的方法来实现同样的目标)
【问题讨论】:
此表单有一个 NotifyIcon 对象。当用户单击关闭按钮时,我希望表单不关闭而是不可见。然后,如果用户想再次查看表单,他可以双击系统托盘中的图标。如果用户想关闭表单,可以右击图标,选择“关闭”。
谁能告诉我如何让关闭按钮不关闭表单而是让它不可见?
(或者如果有人能想出更好的方法来实现同样的目标)
【问题讨论】:
首先,您要处理主窗体的.FormClosing 事件(或通过覆盖OnFormClosing 方法)。通过将 e.Cancel 设置为 true 来取消它。
然后,您使用NotifyIcon 将图标添加到系统托盘。
最后,通过调用.Hide()隐藏表单。
protected override void OnFormClosing(FormClosingEventArgs e) {
if (IActuallyWantToCloseFlag)
return;
var ni = new NotifyIcon(this.components)
{
Icon = someIcon,
Text = "My text",
Visible = true
};
ni.DoubleClick += (sender, args) => { this.Show(); };
this.Hide();
e.Cancel = true;
}
这应该可以帮助您入门。您可能希望将ni 设为成员变量,以便在显示/隐藏表单时继续隐藏/显示图标。
【讨论】:
您可以尝试将其设为托盘图标应用。这里有一个很好的教程:http://www.developer.com/net/net/article.php/3336751/C-Tip-Placing-Your-C-Application-in-the-System-Tray.htm
【讨论】:
实现您想要的最简单的方法是订阅 FormClosing 事件并通过包含此类代码将可见设置为 false:
FormClosing += (sender, args) => { args.Cancel = true; Visible = false; };
【讨论】: