【发布时间】:2016-09-21 19:57:55
【问题描述】:
我有一个 WinForms 应用程序 (.NET 4),需要全屏显示或无边框最大化。
在Form_Shown 事件中使用以下代码:
#if (DEBUG)
var debug = true;
#else
var debug = false;
#endif
this.Text = "";
this.ControlBox = false;
this.ShowInTaskbar = true;
//this.TopMost = debug;
this.TopLevel = true;
this.FormBorderStyle = FormBorderStyle.None;
if (debug) { this.Bounds = Screen.FromControl(this).WorkingArea; }
else { this.WindowState = FormWindowState.Maximized; }
如果您仔细查看下面的屏幕截图,顶部和底部区域被截断了几个像素。此外,如果最大化,窗口仍然不会覆盖任务栏。
请注意,我只连接了一台显示器。没有辅助显示器。
对于如何解决上述两个问题的任何建议将不胜感激。
更新:上面的代码似乎适用于没有MenuStrip 或StatusStrip 的表单。
【问题讨论】:
-
任务栏总是出现在窗口的顶部,即使它被设置为自动隐藏。另请注意,根据WorkingArea's 文档,它不考虑在自动隐藏模式下折叠任务栏的大小。您是否正在尝试创建 Kiosk 应用程序?
-
@utility:更新了屏幕截图。以全尺寸打开图像并查看顶部菜单栏和底部状态条。表单边界似乎开始于小于零 (Y1) 并且似乎结束于大于工作区域高度 (Y2)。
-
@GrantWinney:是的,请参阅下面我对 Reza 回答的评论。我最初在设计器中将表单设置为最大化,但忘记撤消了。
-
这段代码属于构造函数,从不在Shown中。除了避免非常难看的闪烁之外,您还可以避免这些属性具有的令人讨厌的副作用。就像在最大化窗口的大小上猛拉地板垫一样。
-
@HansPassant:谢谢!我没有意识到
FormBorderStyle和WindowState属性会产生如此糟糕的效果(更是如此,因为我在构造函数之后通过代码手动布局控件)。按照您的建议,将闪烁从几秒钟减少到几乎为零。
标签: c# .net winforms fullscreen