Winform中全屏显示问题
默认分类2009-11-12 11:47:14 阅读109评论0 字号:大中小 订阅
在C#的Winform中实现窗口全屏显示的代码非常简单,如下:
this.FormBorderStyle = FormBorderStyle.N one;
this.Wi ndowState = FormWi ndowState.Maximized;
this.TopMost = true; // 这句无关紧要,可以不加
本来没什么可说的,但是一一
今天碰巧要实现一个用键盘快捷键来切换“ 全屏/窗口”的功能,发现只有第一
次按的时候正常实现全屏。
在点击按键切换成非 全屏后,再切回来时任务栏不消失。代码如下:
if (this.FormBorderStyle == FormBorderStyle.N one)
{
this.FormBorderStyle = FormBorderStyle.FixedS in gle;
}
else
{
this.FormBorderStyle = FormBorderStyle.N one;
this.Wi ndowState = FormWi ndowState.Maximized;
}
第一次按的时候正常说明代码没有大的问题,,
第一次和后来的N次操作有什么区别呢?
突然想到第一次按的时候程序是以正常大小的窗口 显示的,而后续按键操作时因 程序语句的关系窗口一直是最大化的(无论 全屏与否)。
当即改成如下代码:
if (this.FormBorderStyle == FormBorderStyle.N one)
{
this.FormBorderStyle = FormBorderStyle.FixedS in gle; this.Wi ndowState = FormWi ndowState.Normal;
}
else
this.FormBorderStyle = FormBorderStyle.N one; this.Wi ndowState = FormWi ndowState.Maximized;
OK 一切正常了。
但是为什么会出现这个问题呢?想了一下,觉得应该是这样:
在最初的代码中,从全屏切换成窗口时,此时窗口的 WindowState保留了最大化 的状态。
又因为此时不是 全屏,任务栏是要 显示的,所以此时显示的程序窗口大小不是 1024*768,而是 1024*(768-30)=1024*738
当再从最大化的窗口切回 全屏时,程序将FormBorderStyle设置成None后,执 行到“ this.Wi ndowState = FormWi ndowState.Maximized ” 这句时,因
为窗口状态已经是Maximized ,所以系统自动接受了此时窗口的大小,而问题 是此时的窗口大小并不是1024*768 ,所以就出现上面问题了。
在作 winform 程序时遇到窗口如果全屏时,遮盖任务栏的问题,从网上搜到如下解决办法,与各位共享。以下代码本人都试过,没问题:
1.
执行如下按钮事件
private void btnFormMax_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else
{
this.WindowState = FormWindowState.Maximized;
}
}
窗体最大化时 非全屏 不会遮盖任务栏
此时 this.FormBorderStyle 默认为 Sizable
2.
执行如下按钮事件
private void btnFormMax_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
窗体最大化时 会全屏 及遮盖任务栏
此时 this.FormBorderStyle 为 None 不会显示窗体标题栏等相关
3.
执行如下按钮事件
private void btnFormMax_Click(object sender, EventArgs e)
{
if (this.WindowStat
原创力文档

文档评论(0)