答案 0 :(得分:8)
由于通常的原因,当您在MSDN Library中看到此注释时, way 的概率太多,您将使用此错误。代码中只有一个位置,您可以调用此方法并获得预期结果。
这是由表单的Size属性引起的问题。当然需要知道如何集中它。太多程序员将他们在“属性”窗口中看到的值视为福音,他们会假设窗口也会在用户的计算机上具有该大小。这种情况很少发生。
第一个问题是用户首选项,他们可以更改标题文本和控制按钮的大小。或者他们会启用Aero(或不启用),这会给窗口带来边框。这可能会导致大小关闭一定量,实际窗口的大小在运行时将与您在“属性”窗口中看到的大小不同。 Winforms已经适应的东西,它实际上并不存储您的设计的Size属性,它存储ClientSize属性。在创建窗口时,CreateHandle()方法运行时,实际大小是未知的。所以你不能在表单的构造函数中调用CenterToScreen(),也不能在Show()调用之前调用它,这太早了。
第二个问题是表单的AutoScaleMode属性。最近特别重要的是,许多用户不再以96 DPI的默认设置运行他们的机器。自Vista以来特别容易改变。这将导致窗口的大小关闭得更厉害。在重新调整窗口之前,实际大小是未知的,在OnLoad()方法运行时完成。
稍后调用它会产生视觉瑕疵,用户实际上可以看到窗口在屏幕上移动。所以只有一个地方,即表单的OnLoad()方法/ Load事件处理程序。但它已经发生在那里,当它被设置为CenterScreen时应用StartPosition属性。因此,没有任何理由可以自己调用它。它应该是一种私有方法,当然很难在以后修复这样的设计错误。