在C#中最小化系统窗口窗体,而不看到它挂在任务栏上

在C#中最小化系统窗口窗体,而不看到它挂在任务栏上,c#,winforms,system-tray,minimize,C#,Winforms,System Tray,Minimize,我使用上面的代码使用托盘图标最小化我的应用程序。现在,我表单的最小化部分仍然挂在“开始”按钮所在的任务栏上方的左右角。可见的只是表单的灰色标题栏,标题栏上有一个小“x”来关闭它,标题栏上方有标题文本。 这很奇怪。我将表单设置为“mimimized”,并设置为不显示在任务栏中,但它仍然显示。 我已经在我的表单中注册了热键,所以我可能不会将其设置为“不可见”,否则热键会以某种方式停止工作,即使我以后再次注册热键。 除了将其设置为“不可见”之外,我还没有其他选择来删除这个最小化的表单标题 或者删除标题

我使用上面的代码使用托盘图标最小化我的应用程序。现在,我表单的最小化部分仍然挂在“开始”按钮所在的任务栏上方的左右角。可见的只是表单的灰色标题栏,标题栏上有一个小“x”来关闭它,标题栏上方有标题文本。 这很奇怪。我将表单设置为“mimimized”,并设置为不显示在任务栏中,但它仍然显示。 我已经在我的表单中注册了热键,所以我可能不会将其设置为“不可见”,否则热键会以某种方式停止工作,即使我以后再次注册热键。 除了将其设置为“不可见”之外,我还没有其他选择来删除这个最小化的表单标题 或者删除标题栏我也不想做的事。我需要在这个程序中的标题栏,标题栏图标和标题栏控制区域,表格不能成为工具窗口或无边框

如何在不将窗体设置为工具窗口且不将其设置为完全不可见的情况下,使任务栏上方的灰色窗体其余部分消失。我的热键必须仍然工作后,它和形式必须仍然保持其标题栏,图标和控制区域,当我设置它回到正常

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

重要: 标题栏在窗体最小化时显示的问题与注册的热键无关。 这是一个常见的“问题”。如果我有一个窗体,将其最小化并在任务栏中将其设置为不可见 它仍然显示在任务栏中带有“x”的标题栏中。这是我想删除而不做任何修改 窗体不可见或不删除窗口样式。 由于热键消失,“this.show”或“this.hide”的行为与“this.visible=true/false”的行为相同。默认情况下,我创建的表单如图所示,但不希望创建已隐藏的表单

这是不应该存在的东西-如何在不造成伤害的情况下移除它:

当您想隐藏和显示表单时,只需调用
Hide()
Show()
。 注意:
Hide()
也将从任务栏中隐藏

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();
您可以隐藏和显示表单对面的
notify图标
,以便在显示表单时没有图标

显然,您需要一个
NotifyIcon
来在系统托盘中显示您的应用程序

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

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

显然,这是一个XY问题。重写form类中的OnHandleCreated()方法并在其上设置断点。它应该在启动时只命中一次。如果在那之后它中断了,那么在调用堆栈中查找代码中重新创建窗口的语句。否则,这也是您需要注册密钥的方法。那么为什么不将表单的不透明度设置为0%以隐藏它,将其设置为100%以显示它?您是否也尝试过在单独的类中注册热键?就像这个帖子一样:我在C#中使用过上面链接的键盘热键。但这取决于你。
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;
}