如何在任务栏上以全屏方式显示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;
此代码使您的窗口全屏幕,这也将覆盖整个屏幕