C#设置Form的Left=0不能令Form紧贴屏幕左边缘怎么办?

现象

Win10中建了个.Net5.0的桌面应用,运行后Form全屏没毛病,Form四周没有空当,但如果想让Form紧贴屏幕边缘,发现:

1.设置Form的Left=0达不到预期效果,实际呈现的是Form的左边缘与屏幕的左边缘有8像素的空当;

2.设置Form的Top=0和Height=工作区Height也达不到预期效果,实际呈现的是Form的下边缘与任务栏的上边缘也有空当。

总之,丑死!

分析过程

查资料说原因可能是FormBorderStyle、DPI、多显示器环境、Windows主题设置,都排除掉了或者不能采纳,比如建议设置this.FormBorderStyle=FormBorderStyle.None,是能解决问题,但把标题栏搞没了能忍?!

=> 上面这些因素,列出来的,没列出来的,是否可以视为牛鬼蛇神,能不用考虑不?

=> 为什么全屏显示就是正常的,就没空当出来?

= > 那我利用全屏时Form的位置和尺寸作为工作区可以不?

开干!

解决办法

第1步:获取全屏下Form的位置和尺寸的实践数据

cs 复制代码
private Rectangle mStandardRectForMax; //全屏下Form实际位置和尺寸
private bool mIsMaximizing = false;

private void Form1_Resize(object sender, EventArgs e){
    if (mIsMaximizing)
    {
        return;
    }

    if (this.WindowState == FormWindowState.Maximized)
    {
        mIsMaximizing= true;

        // Form所处的屏幕
        Screen currentScreen = Screen.FromControl(this);
        // 获取屏幕的工作区(去掉任务栏等部分的区域)
        Rectangle screenBounds = currentScreen.WorkingArea; //Form所在屏幕
        // 实践值:全屏下Form实际位置和尺寸
        StandardRectForMax = this.Bounds;

        // 取消最大化
        this.WindowState = FormWindowState.Normal;

        mIsMaximizing= false;
    }
}

第2步:将Form置于实践数据所揭示的工作区去摆放

Form紧贴屏幕左边缘

cs 复制代码
this.Left = mStandardRectForMax.Left

Form紧贴屏幕右边缘

cs 复制代码
this.Left = standardRectForMax.Right - this.Bounds.Width;

Form紧贴屏幕左上角,并在垂直方向上拉满

cs 复制代码
this.Bounds = new Rectangle(
    mStandardRectForMax.Left,
    mStandardRectForMax.Top,
    this.Bounds.Width,
    mStandardRectForMax.Height
);
相关推荐
念九_ysl1 分钟前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin52112311 分钟前
124. Java 泛型 - 有界类型参数
java·开发语言
liulilittle31 分钟前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
88号技师37 分钟前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
勤奋的知更鸟43 分钟前
Java 编程之模板方法模式
java·开发语言·模板方法模式
上单带刀不带妹2 小时前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-2 小时前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼2 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
军训猫猫头3 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
真的想上岸啊3 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习