Windows窗体在左侧辅助显示器上时无法调整大小

4
我在使用一款用C#编写的Windows应用程序时遇到了一个非常奇怪的问题。虽然它没有任何特殊之处,但是当我的第二个屏幕被配置为位于主屏幕的左侧时,主窗口可以在主监视器和任何辅助监视器上完美地工作。然而,当我将辅助屏幕重新配置为位于主屏幕的左侧时,我(以及其他人)就不能改变窗体的大小了。鼠标指针不会变成“NW-SE箭头”,也不会通过单击和拖动边缘来对窗口大小进行任何更改。经过一些额外的实验发现,这似乎只在窗体的AutoSizeMode属性设置为GrowAndShrink时才会出现?这是某种bug还是我误解了这个属性?要重现此问题,您应该开始一个新的WinForms项目,向窗体底部添加一个StatusStrip,运行项目(在我的情况下是Debug/Any CPU),将窗体拖到位于您主屏幕左侧的辅助监视器上。另外,当我删除StatusStrip时,根本无法调整窗体大小,因此我猜测这是在StatusStrip对象中的某种副作用/bug...添加一个复选框并使用以下代码使问题变得十分明显,问题围绕着AutoSizeMode属性。
private void chkAutoGrowAndShrink_CheckedChanged(object sender, EventArgs e) 
{ 
     this.AutoSizeMode = chkAutoGrowAndShrink.Checked ? 
             AutoSizeMode.GrowAndShrink : 
             System.Windows.Forms.AutoSizeMode.GrowOnly; 
}

更新:

最近我更换了电脑,现在在使用VS2010进行测试时,问题已经不再存在。我仍然不确定这个问题从何而来,也许随着时间推移,.NET已经修复了这个问题,也许是驱动程序的问题... 我想我们永远不会知道答案,但似乎保留这个问题没有太大用处,所以我将标记它为关闭。尽管如此,还是要感谢所有花时间回答的人!


你是否在窗体或包含控件的大小/位置上进行任何计算?位于主屏幕左侧的屏幕将具有负坐标,很容易假设它们在计算中始终为非负数。 - Richard
不在我的原始代码中,也不在“复制示例”中。但我同意可能是原生对象内部的某些东西导致了这个问题。我希望其他人也能够重现它,或者实际上没有重现,这两种情况在向微软发送错误报告之前都很有趣... - deroby
我也在Win7x64上使用NVIDIA Quadro NVS 140M视频适配器时遇到了这个问题。
  • 在主显示器上,窗口可以调整大小,无论它是左侧还是右侧的显示器。
  • 在次要显示器上,当它位于主显示器的右侧时,窗口可以调整大小,但当它位于主显示器的左侧时则不行。
- Eoan
如果您可以仅使用标准控件重新创建此内容,并且不需要代码来操作大小/位置,则建议在http://connect.microsoft.com/上报告错误。 - Richard
1
问题仍然存在于.NET Framework和4.x甚至.NET Core 3.x中(只有在使用ShowDialog显示窗体时)。我最近在winforms repo中合并了一个修复程序,它将在.NET 5中发布。 - György Kőszeg
@GyörgyKőszeg:不错,非常感谢! - deroby
2个回答

0

看起来这个问题与硬件/驱动程序/特定版本的.NET/???有关。因此,将问题关闭。


0
如果您无法在窗体上没有状态栏的情况下调整大小,则可能存在其他问题。除非将FormBorderStyle属性设置为固定样式,否则所有窗体都应该是可调整大小的。

FormBorderStyle被设置为SizeAble。坦白地说,除了名称、文本和AutoSizeMode之外,我没有触及任何属性。 - deroby
在代码后面添加一个复选框可以很清楚地表明问题围绕着AutoSizeMode属性。抱歉,布局丢失了,似乎是评论框占用了大部分空间... private void chkAutoGrowAndShrink_CheckedChanged(object sender, EventArgs e){ this.AutoSizeMode = chkAutoGrowAndShrink.Checked ? AutoSizeMode.GrowAndShrink : System.Windows.Forms.AutoSizeMode.GrowOnly;} - deroby
哦嗬嗬... 非常令人困惑。 - davisoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接