我在使用一款用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已经修复了这个问题,也许是驱动程序的问题... 我想我们永远不会知道答案,但似乎保留这个问题没有太大用处,所以我将标记它为关闭。尽管如此,还是要感谢所有花时间回答的人!
ShowDialog
显示窗体时)。我最近在winforms repo中合并了一个修复程序,它将在.NET 5中发布。 - György Kőszeg