如何在任务栏顶部全屏显示 Windows 窗体?

我有一个。网络窗口应用程序,需要在全屏幕运行。然而,当应用程序启动时,任务栏显示在主窗体的顶部,只有在单击或使用 ALT-TAB 激活窗体时才会消失。表格的当前属性如下:

  • 正常
  • 最高 = 正常
  • 大小 = 1024,768(这是它将要运行的机器的屏幕分辨率)
  • FormBorderStyle = 无

我试过在表单加载中添加以下内容,但没有一个对我有用:

  • (在给焦点这个之后。焦点属性总是假的)
  • 带到前面() ;
  • TopMost = true; (然而在我的场景中这并不理想)
  • 界限 = 屏幕
  • 界限 = 屏幕

有没有办法。NET 或者我必须调用本机窗口方法,如果是这样的话,一个代码片段将非常感谢。

非常感谢

349078 次浏览

用途:

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

然后将窗体放在任务栏上。

我相信这可以通过简单地将 FormBorderStyle 属性设置为 Nothing,将 WindowState 设置为 Maximized 来完成。如果您正在使用 VisualStudio,则这两者都可以在 IDE 中找到,因此不需要以编程方式进行此操作。请务必包括一些方式关闭/退出程序之前,这样做,这将删除这么有帮助的右上角的 X。

编辑:

试试这个。这是我保存了很长时间的一个片段。我都不记得是谁的功劳了,但是很管用。

/*
* A function to put a System.Windows.Forms.Form in fullscreen mode
* Author: Danny Battison
* Contact: gabehabe@googlemail.com
*/


// a struct containing important information about the state to restore to
struct clientRect
{
public Point location;
public int width;
public int height;
};
// this should be in the scope your class
clientRect restore;
bool fullscreen = false;


/// <summary>
/// Makes the form either fullscreen, or restores it to it's original size/location
/// </summary>
void Fullscreen()
{
if (fullscreen == false)
{
this.restore.location = this.Location;
this.restore.width = this.Width;
this.restore.height = this.Height;
this.TopMost = true;
this.Location = new Point(0,0);
this.FormBorderStyle = FormBorderStyle.None;
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Height = Screen.PrimaryScreen.Bounds.Height;
}
else
{
this.TopMost = false;
this.Location = this.restore.location;
this.Width = this.restore.width;
this.Height = this.restore.height;
// these are the two variables you may wish to change, depending
// on the design of your form (WindowState and FormBorderStyle)
this.WindowState = FormWindowState.Normal;
this.FormBorderStyle = FormBorderStyle.Sizable;
}
}

我的简单修复结果是调用表单的 Activate()方法,所以没有必要使用 TopMost(这正是我的目标)。

我已经尝试了很多解决方案,其中一些可以在 WindowsXP 上运行,而所有的都不能在 Windows7上运行。毕竟我写了一个简单的方法来做到这一点。

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,从而允许其他表单覆盖主表单。

这绝对解决了我的问题。

一个经过测试的简单解决方案

我一直在 SO 和其他一些网站上寻找这个问题的答案,但其中一个给出的答案对我来说非常复杂,其他一些答案根本不能正确工作,所以经过大量的代码测试后,我解决了这个难题。

注意: 我正在使用 视窗8,我的任务栏没有处于自动隐藏模式。

我发现,在执行任何修改之前将 WindowState 设置为 Normal 将停止未覆盖任务栏的错误。

密码

我创建了这个类,它有两个方法,第一个进入“全屏模式”,第二个离开“全屏模式”。所以你只需要创建这个类的一个对象,然后把你想设置全屏的 Form 作为参数传递给 EnterFullScreenMode 方法或者 LeaveFullScreenMode 方法:

class FullScreen
{
public void EnterFullScreenMode(Form targetForm)
{
targetForm.WindowState = FormWindowState.Normal;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.WindowState = FormWindowState.Maximized;
}


public void LeaveFullScreenMode(Form targetForm)
{
targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
targetForm.WindowState = FormWindowState.Normal;
}
}

用法例子

    private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
{
FullScreen fullScreen = new FullScreen();


if (fullScreenMode == FullScreenMode.No)  // FullScreenMode is an enum
{
fullScreen.EnterFullScreenMode(this);
fullScreenMode = FullScreenMode.Yes;
}
else
{
fullScreen.LeaveFullScreenMode(this);
fullScreenMode = FullScreenMode.No;
}
}

我把同样的答案放在另一个问题上,我不确定是否是这个问题的复制品。(连结至另一个问题: 如何使 WinForms 应用程序全屏显示)

这是我如何使表格全屏幕。

private void button1_Click(object sender, EventArgs e)
{
int minx, miny, maxx, maxy;
inx = miny = int.MaxValue;
maxx = maxy = int.MinValue;


foreach (Screen screen in Screen.AllScreens)
{
var bounds = screen.Bounds;
minx = Math.Min(minx, bounds.X);
miny = Math.Min(miny, bounds.Y);
maxx = Math.Max(maxx, bounds.Right);
maxy = Math.Max(maxy, bounds.Bottom);
}


Form3 fs = new Form3();
fs.Activate();
Rectangle tempRect = new Rectangle(1, 0, maxx, maxy);
this.DesktopBounds = tempRect;
}
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
FormBorderStyle = FormBorderStyle.Sizable;
TopMost = false;
WindowState = FormWindowState.Normal;

这个代码使你的窗口全屏,这也将覆盖整个屏幕

我不知道它是怎么工作的,但是很有效,我只需要当个牛仔程序员。

        System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
this.MaximizedBounds = Screen.GetWorkingArea(this);
this.WindowState = FormWindowState.Maximized;