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的位置和尺寸的实践数据
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紧贴屏幕左边缘
this.Left = mStandardRectForMax.Left
Form紧贴屏幕右边缘
this.Left = standardRectForMax.Right - this.Bounds.Width;
Form紧贴屏幕左上角,并在垂直方向上拉满
this.Bounds = new Rectangle(
mStandardRectForMax.Left,
mStandardRectForMax.Top,
this.Bounds.Width,
mStandardRectForMax.Height
);
原文地址:https://blog.csdn.net/i1j2k3/article/details/144233101
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!