.net Can';t将Windows窗体与Windows 10中显示器的左边缘对齐

.net Can';t将Windows窗体与Windows 10中显示器的左边缘对齐,.net,winforms,.net,Winforms,我正在.NET框架中使用Windows窗体。在Windows 7和以前版本的Windows上,如果我设置Form.Left=0和Form.Top=0,则窗体将与我的显示器的左边缘和上边缘对齐。但是如果我在Windows10中这样做的话,表单将被放置在距离左边缘约7像素的位置,同时仍然与上边缘对齐。如果在.Top处于状态时从中查询,则可以看到它仍然设置为0。Form.Padding.Left也为0 我假设eleft边缘的7像素偏移可能会随DPI设置等而变化,所以我不想只设置Form.Left=-7

我正在.NET框架中使用Windows窗体。在Windows 7和以前版本的Windows上,如果我设置Form.Left=0和Form.Top=0,则窗体将与我的显示器的左边缘和上边缘对齐。但是如果我在Windows10中这样做的话,表单将被放置在距离左边缘约7像素的位置,同时仍然与上边缘对齐。如果在.Top处于状态时从中查询,则可以看到它仍然设置为0。Form.Padding.Left也为0

我假设eleft边缘的7像素偏移可能会随DPI设置等而变化,所以我不想只设置Form.Left=-7使其与左边缘对齐


这似乎很奇怪,必须有一个简单的解释。

有。Win10使用1像素的可见边框,其余为透明边框。在透明部分移动鼠标可以看到。@HansPassant,如果我从左边向窗体移动鼠标,那么我确实可以看到,当鼠标距离窗体的可见边缘大约7像素时,它会变成一个调整大小的手柄。如果我将鼠标向下移向窗体的上边缘,则在我触及可见边缘之前,它不会变为调整大小的控制柄。看起来,透明边框的左、右和底部宽7像素,而顶部宽0像素。有没有办法在代码中获得透明边框的宽度?没有。只需将其移动到需要的位置即可。加载事件是执行此操作的正确位置,此时将应用DPI重缩放和用户首选项副作用。this.Left-=this.PointToScreen(Point.Empty).X-Screen.FromPoint(Point.Empty).WorkingArea.Left-1;你提到“透明”这个词帮助我找到了其他基本上问同样问题的帖子,比如这篇。这篇文章表明,调用DwmGetWindowAttribute()来请求DWMWA_EXTENDED_FRAME_边界是我所需要的。当我调用该函数时,它返回一个RECT对象,显示不可见的边界确实是7像素宽,0像素高。感谢您的帮助,如果没有您的输入,我将无法找到这些信息。上一条评论中的解决方案仅在Windows 10中将字体缩放设置为100%时有效,它不处理较大的字体。