msdn


  不要直接从您的代码中调用它。而是将StartPosition属性设置为CenterScreen。


有人知道为什么吗?

最佳答案

由于通常的原因,当您在MSDN库中看到此批注时,使用这种错误的可能性太大。在代码中只有一个地方可以调用此方法并获得预期的结果。

这是由窗体的Size属性引起的麻烦。当然需要知道如何居中。太多的程序员将他们在“属性”窗口中看到的价值当作福音,他们假设该窗口在用户计算机上也具有该大小。这种情况很少发生。

第一个问题是用户首选项,他们可以更改标题文本和控制按钮的大小。否则,他们将启用(或不启用)Aero,从而使窗口带有粗边框。这可能会导致“大小”偏离很小,运行时实际窗口的“大小”将与“属性”窗口中看到的不同。 Winforms已经提供了一些功能,它实际上并不存储设计的Size属性,而是存储ClientSize属性。在运行CreateHandle()方法时,在创建窗口之前,“实际大小”是未知的。因此,您不能在窗体的构造函数中调用CenterToScreen(),也不能在Show()调用之前调用它,这还为时过早。

第二个问题是窗体的AutoScaleMode属性。最近特别重要,许多用户不再以默认设置96 DPI运行其计算机。自Vista以来,更改特别容易。这将导致窗口的大小更明显地减小。直到重新缩放窗口(在OnLoad()方法运行时完成)后,“实际大小”才知道。

稍后调用它会产生视觉伪像,用户实际上可以看到窗口在屏幕上移动。因此,只有一个地方,即表单的OnLoad()方法/ Load事件处理程序。但是它已经在那里发生,将StartPosition属性设置为CenterScreen时便在该位置应用。因此,没有多余的理由自己调用它。这本来应该是一种私有方法,当然稍后很难解决此类设计错误。

关于c# - 为什么不直接从代码中使用Form.CenterToScreen?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26445042/

10-13 04:20