如何在任务栏上以全屏方式显示Windows窗体?

我有一个.net Windows应用程序需要全屏运行。 当应用程序启动时,任务栏显示在主窗体的顶部,只有通过点击或使用ALT-TAB激活窗体时才会消失。 表单的当前属性如下所示:

  • 的WindowState = FormWindowState.Normal
  • 最顶层=正常
  • 大小= 1024,768(这是它将运行的机器的屏幕分辨率)
  • FormBorderStyle =无

我已经尝试添加以下表单加载,但没有为我工作:

  • this.Focus(); (在给予焦点之后。焦点属性总是假的)
  • this.BringToFront();
  • this.TopMost = true; (但是这在我的情况下不会很理想)
  • this.Bounds = Screen.PrimaryScreen.Bounds;
  • this.Bounds = Screen.PrimaryScreen.Bounds;

有没有办法做到这一点在.NET中,或者我将不得不调用本地Windows方法,如果是这样的代码片断将非常赞赏。

非常感谢

使用:

FormBorderStyle = FormBorderStyle.None WindowState = FormWindowState.Maximized 

然后是放置在任务栏上的表单。

我已经尝试了很多解决scheme,其中一些解决scheme在Windows XP上运行,而所有解决scheme都不能在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留在错误的位置上,允许其他表单通过主表单。

这绝对解决了我的问题。

这是我如何使窗体全屏。

 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; } 

我简单的修复它原来是调用窗体的Activate()方法,所以没有必要使用TopMost (这是我所瞄准的)。

 FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; WindowState = FormWindowState.Maximized; 

经过testing的简单解决scheme

我一直在SO和其他一些网站上寻找这个问题的答案,但是一个给了我一个非常复杂的答案,而另一些答案根本无法正常工作,所以经过很多代码testing之后,我解决了这个难题。

注意:我正在使用Windows 8,而我的任务栏不处于自动隐藏模式。

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

代码

我创build了这个类有两种方法,第一种进入“全屏模式”,第二种留下“全屏模式”。 所以你只需要创build这个类的一个对象,然后把你想要设置的全屏幕forms作为parameter passing给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应用程序全屏显示 )

我相信这可以通过简单地将您的FormBorderStyle属性设置为None和WindowState最大化来完成。 如果您使用的是Visual Studio,则可以在IDE中find这两者,因此不需要以编程方式执行此操作。 确保包含一些closures/退出程序的方法,这样做会消除右上angular的那么有用的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; } } 

我没有解释它是如何工作的,但作品,并作为牛仔编码器是我所需要的。

  System.Drawing.Rectangle rect = Screen.GetWorkingArea(this); this.MaximizedBounds = Screen.GetWorkingArea(this); this.WindowState = FormWindowState.Maximized; 
 FormBorderStyle = FormBorderStyle.Sizable; TopMost = false; WindowState = FormWindowState.Normal; 

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