Winforms - 为什么系统托盘双击后的“Show()”最终在我的应用程序中最小化?
我如何确保在通知图标双击事件中,我隐藏的主表单恢复正常可见,而不是最小化(也不是最大化)
Winforms - 为什么系统托盘双击后的“Show()”最终在我的应用程序中最小化?
我如何确保在通知图标双击事件中,我隐藏的主表单恢复正常可见,而不是最小化(也不是最大化)
我猜您将应用程序放在托盘中以最小化操作。在这种情况下,Show 只是恢复可见性。
尝试form.WindowState = Normal
在 Show() 之前添加。
使用 NotifyIcon 隐藏表单通常是可取的,因此您的应用程序会立即在托盘中启动。您可以通过覆盖 SetVisibleCore() 方法来防止它变得可见。您通常还希望防止它在用户单击 X 按钮时关闭,重写 OnFormClosing 方法以隐藏表单。您需要一个上下文菜单来允许用户真正退出您的应用程序。
将 NotifyIcon 和 ContextMenuStrip 添加到您的表单。给 CMS 显示和退出菜单命令。使表单代码如下所示:
public partial class Form1 : Form {
bool mAllowClose;
public Form1() {
InitializeComponent();
notifyIcon1.DoubleClick += notifyIcon1_DoubleClick;
notifyIcon1.ContextMenuStrip = contextMenuStrip1;
showToolStripMenuItem.Click += notifyIcon1_DoubleClick;
exitToolStripMenuItem.Click += (o, e) => { mAllowClose = true; Close(); };
}
protected override void SetVisibleCore(bool value) {
// Prevent form getting visible when started
// Beware that the Load event won't run until it becomes visible
if (!this.IsHandleCreated) {
this.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
protected override void OnFormClosing(FormClosingEventArgs e) {
if (!this.mAllowClose) { // Just hide, unless the user used the ContextMenuStrip
e.Cancel = true;
this.Hide();
}
}
void notifyIcon1_DoubleClick(object sender, EventArgs e) {
this.WindowState = FormWindowState.Normal; // Just in case...
this.Show();
}
}