我正在使用Visual Studio 2010、C# .NET 4和WinForms。我的电脑有2个显示器。
当我调用一个窗体的CenterToScreen方法时,这个窗体会在光标所在的屏幕上自动居中。有没有人知道为什么会这样?
当我调用一个窗体的CenterToScreen方法时,这个窗体会在光标所在的屏幕上自动居中。有没有人知道为什么会这样?
根据文档:
不要直接从代码中调用此方法。相反,将StartPosition属性设置为CenterScreen。
CenterToScreen方法使用以下优先级列表来确定用于居中窗体的屏幕:
- 窗体的Owner属性。
- 窗体的HWND所有者。
- 当前拥有鼠标光标的屏幕。
因此,它有效地用于窗体的初始显示。 不打算以后再使用。
您可以像这样编写自己的居中方法:
protected void ReallyCenterToScreen()
{
Screen screen = Screen.FromControl(this);
Rectangle workingArea = screen.WorkingArea;
this.Location = new Point() {
X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - this.Width) / 2),
Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - this.Height) / 2)
};
}
StartPosition
设置为CenterScreen
,但当数据加载时,窗体大小可能会自动更改,因此我希望重新居中它。感谢上面的文档片段。现在一切都很清楚了。=) - Welton v3.62CenterToScreen
方法之前,我曾尝试过类似的逻辑(高度和宽度除以2等等),但我无法确定应用程序当前所在的屏幕。'Screen.FromControl'就是解决问题的关键!现在一切都按预期工作了。=) - Welton v3.62