最小化C#中托盘中的系统窗体,而不会将其挂在任务栏的任何位置

时间:2013-07-14 16:15:29

标签: c# winforms system-tray minimize

this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
//this.visible = false (Hotkeys stop working forever but the grey rest of the form would disappear from above taskbar)
ReRegisterHotkeys();

我使用上面的代码通过托盘图标最小化我的应用程序。现在,我的表单最小化的剩余部分仍然位于开始按钮所在的任务栏上方的左上角。可见只有表格灰色标题栏,小“x”关闭它,标题栏上方标题文字。 这很奇怪。我将我的表单设置为“mimimized”并设置为不在任务栏中显示,它仍然存在。 我已经用我的表单注册了热键,所以我可能不会将其设置为“隐形”,否则即使我再次重新注册热键,热键也会停止工作。 除了将它设置为“隐形”之外,我发现除了删除这个最小化的表格标题之外别无选择 或删除其标题栏我不想做的事情。我需要此程序中的标题栏,标题栏图标和标题栏控件区域,表单不得成为工具窗口或没有边框。

如何在不将工具窗口设置为工具窗口且不将其设置为完全不可见的情况下,使任务栏上方窗体的灰色剩余部分消失。我的热键必须在它之后仍然有效,当我再次将其恢复正常时,表格仍然必须保留其标题栏,图标和控制区域。

我从此example获取了热键代码。唯一的区别是我打包过程将热键注册到名为“ReRegisterHotkeys()”的子函数中。

重要的: 显示最小化表单时标题栏的问题与注册的热键无关。 这是一个常见的“C#问题”。如果我有一个表单并将其最小化并将其设置为在任务栏中不可见 它仍然显示任务栏中带有“x”的标题栏。这个我想删除而不做 表单不可见或不删除窗口样式。 “this.show”或“this.hide”的行为与“this.visible = true / false”相同,因为热键消失了。我创建了默认显示的表单,并且不想将其隐藏起来。

这是不存在的 - 如何在不伤害的情况下将其删除: enter image description here

1 个答案:

答案 0 :(得分:0)

当您想要隐藏和显示表单时,您只需拨打Hide()Show()即可。 注意:Hide()也会隐藏在任务栏中。

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
        Hide();
}

您可以隐藏并显示表单对面的NotifyIcon,以便在显示表单时没有图标。

显然,您需要NotifyIcon才能在系统托盘中显示您的应用。

最后,您的代码将如下所示:

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        Hide();
        notifyIcon1.Visible = true;
    }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    Show();
    notifyIcon1.Visible = false;
    WindowState = FormWindowState.Normal;
}