mus*_*fan 4 visual-studio winforms
我面临的问题是,每次打开设计器时,WinForms表单都会自动重新调整大小.
这似乎只在某个设置中发生,但可以通过以下步骤轻松复制...
FormBorderStyle属性设置为FixedSingleShowIcon属性设置为falseControlBox属性设置为false我遇到的问题是,当它发生时,它不会调整任何控件(即使用锚点设置的控件)的大小,所以这意味着我最终得到了与表单边缘重叠的控件,每次都需要手动重新调整所有内容我打开设计师这很痛苦.
所以问题是:为什么会发生这种情况,我该怎么做才能阻止它发生?
我目前正在使用Visual Studio 2012 Professional,John Willemse已通过评论确认此问题也出现在Visual Studio 2010 Professional中.
我明白了,这应该是任何VS版本中的错误.它是由ShowIcon属性引起的,当您将其设置为False时,设计器无法正确处理它.问题是Form类中的一些代码如下所示:
FormBorderStyle borderStyle = FormBorderStyle;
if (!ShowIcon &&
(borderStyle == FormBorderStyle.Sizable ||
borderStyle == FormBorderStyle.Fixed3D ||
borderStyle == FormBorderStyle.FixedSingle))
{
cp.ExStyle |= NativeMethods.WS_EX_DLGMODALFRAME;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,当ShowIcon为False时,它使用与WS_BORDER 不同的边框样式,它使用模式对话框.在较旧的Windows版本上有不同的边框,它们更胖.不确定是什么启发了这段代码,可能与Windows 98有关.
问题是,Size属性是计算值,Winforms设计器只存储ClientSize属性.因此,当ShowIcon为False时,它应重做此计算,但事实并非如此.
您可以在connect.microsoft.com上报告错误,但微软要修复它的几率非常低,因此可能浪费您的时间.有一个非常简单的解决方法,而不是在属性窗口中将ShowIcon设置为False,而是在构造函数中执行它.像这样:
public Form1() {
InitializeComponent();
this.ShowIcon = false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |