23

我使用的是 Windows Vista 和 C#.net 3.5,但我让我的朋友在 XP 上运行该程序并且遇到了同样的问题。

所以我有一个 C# 程序,我在后台运行,系统托盘中有一个图标。我有一个低级键盘钩子,所以当我按下两个键(在本例中为 Ctr+windows)时,它会拉出应用程序的主窗体。表单在组合按键事件处理程序中设置为全屏:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

所以它基本上可以工作。当我点击 CTR+Windows 时,无论我关注什么程序,它都会弹出表单。但有时,任务栏仍会显示在表单上,​​这是我不想要的。当我按下那个组合键时,我希望它总是全屏显示。

我认为这与最初关注的应用程序有关。但即使当我点击我的主窗体时,任务栏有时也会停留在那里。所以我想知道焦点是否真的是问题所在。似乎有时任务栏很顽固,不想坐在我的程序后面。

任何人有任何想法我可以解决这个问题吗?

编辑:更多细节 - 我试图达到与网络浏览器相同的效果,当您将其置于全屏模式或将 powerpoint 置于演示模式时。

在 windows 窗体中,您可以通过将边框样式设置为 none 并最大化窗口来做到这一点。但有时由于某种原因,窗口不会覆盖任务栏。一半的时间会。

如果我将主窗口放在最上面,那么当我单击它时,其他窗口会落在它后面,如果任务栏被隐藏,我不希望这样做。

4

5 回答 5

20

试试这个(this你的表格在哪里):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

这会将表单设置为全屏,并将覆盖任务栏。

于 2008-09-22T23:11:44.593 回答
2

我尝试了很多解决方案,其中一些适用于 Windows XP,而所有解决方案都不适用于 Windows 7。毕竟我写了一个简单的方法来做到这一点。

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

代码的顺序很重要,如果您更改 WindwosState 和 FormBorderStyle 的位置,它将不起作用。

此方法的优点之一是将 TOPMOST 设置为 false,以允许其他表单超越主表单。

它绝对解决了我的问题。

于 2012-01-15T09:41:22.780 回答
1
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F11)
        if (FormBorderStyle == FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
        }
        else
        {
            SuspendLayout();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            ResumeLayout();
        }
}
于 2010-08-26T17:56:57.560 回答
0

据我所知,根据“将任务栏保持在其他窗口之上”设置,任务栏位于窗口上方或下方。(至少,这是 XP 中的措辞。)我想您可以尝试查看是否可以检测到此设置并在需要时切换它?

于 2008-09-22T23:07:48.033 回答
0

尝试调整表单大小并将其置于 z 顺序的前面,如下所示:

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
于 2008-09-22T23:08:31.217 回答