惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
V
V2EX - 技术
S
Secure Thoughts
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
S
Securelist
S
Security Archives - TechRepublic
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
GRAHAM CLULEY
H
Hacker News: Front Page
Microsoft Azure Blog
Microsoft Azure Blog
I
Intezer
Google Online Security Blog
Google Online Security Blog
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Webroot Blog
Webroot Blog
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed
The Cloudflare Blog
I
InfoQ
L
LangChain Blog
U
Unit 42
P
Proofpoint News Feed
S
Schneier on Security
S
Security Affairs
Y
Y Combinator Blog
T
Tenable Blog
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
量子位
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
GbyAI
GbyAI
AWS News Blog
AWS News Blog

博客园 - 青弦

WinForm打印之页边距 [转载]交换的概念和原理 [转载]交换机概述 [转载]笑傲江湖之三层交换篇 [转载]Window.Open()网页弹出窗口大全 [转载]详解HTML中的META标签 [转载]网页滚动条特效 VS2005中TableAdapter中实现动态查询并使用LIKE的方法整理 [转载]如何在MDI中使子窗体只保留一个实例(反射方法) 去除MDI子窗体最大化后在MainMenuStrip上自动产生的最大化等按钮 第一次认真画用例图,错误很多,请大家来指点 代码段,你用了吗? DIV的水平、垂直居中的最佳实现 Excel数字、文本混合列导入SQL Server出现的问题&解决办法 SQL Server 2000导入数据时遇到的问题 不逐流俗,独辟蹊径——另类又好用的软件推荐[不断更新……] [资源]在线工具测试网页载入速度 博客园blog模板CSS自定义美化 达摩克利斯之刃——.NET破解技术初探
Winform中全屏显示问题
青弦 · 2008-01-29 · via 博客园 - 青弦

在C#的Winform中实现窗口全屏显示的代码非常简单,如下:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TopMost = true//这句无关紧要,可以不加

本来没什么可说的,但是——
今天碰巧要实现一个用键盘快捷键来切换“全屏/窗口”的功能,发现只有第一次按的时候正常实现全屏。
在点击按键切换成非全屏后,再切回来时任务栏不消失。代码如下:

if (this.FormBorderStyle == FormBorderStyle.None)
{
    
this.FormBorderStyle = FormBorderStyle.FixedSingle;
}

else
{
    
this.FormBorderStyle = FormBorderStyle.None;
    
this.WindowState = FormWindowState.Maximized;
}

第一次按的时候正常说明代码没有大的问题……
第一次和后来的N次操作有什么区别呢?
突然想到第一次按的时候程序是以正常大小的窗口显示的,而后续按键操作时因程序语句的关系窗口一直是最大化的(无论全屏与否)。
当即改成如下代码:

if (this.FormBorderStyle == FormBorderStyle.None)
{
    
this.FormBorderStyle = FormBorderStyle.FixedSingle;
    
this.WindowState = FormWindowState.Normal;
}

else
{
    
this.FormBorderStyle = FormBorderStyle.None;
    
this.WindowState = FormWindowState.Maximized;
}

OK,一切正常了。
但是为什么会出现这个问题呢?想了一下,觉得应该是这样:
在最初的代码中,从全屏切换成窗口时,此时窗口的WindowState保留了最大化的状态。
又因为此时不是全屏,任务栏是要显示的,所以此时显示的程序窗口大小不是1024*768,而是1024*(768-30)=1024*738
当再从最大化的窗口切回全屏时,程序将FormBorderStyle设置成None后,执行到“this.WindowState = FormWindowState.Maximized”这句时,因为窗口状态已经是Maximized,所以系统自动接受了此时窗口的大小,而问题是此时的窗口大小并不是1024*768,所以就出现上面问题了。

这是我个人的推断,没有经过验证,如果哪们高手知道真实原委并肯指点一二,那真是感激不尽了。