如何在c#中设置每个屏幕的表单分辨率?



我用c# Form做了一个项目

FormBorderStyle=FormBorderStyle.None

分辨率= 1920x1080。

但是,这个项目只设置为1080p,并在屏幕外以720p显示。如何编写此表单(包括其中的组件),使其适合任何屏幕?如果它需要增长,它就会增长,如果它需要缩小,它就会缩小,但所有组件也应该相应移动,这样它们在表单上总是可见的。

就像我说的,我在我的项目中不使用边框。

您首先必须找出屏幕的分辨率是多少。如果您有多个屏幕,默认情况下Form将出现在主屏幕上,即Screen.PrimaryScreen

这有两个您需要的属性:Bounds.WidthBounds.Height。有了这些,你可以改变ClientSize,以适应您的屏幕。

private double screenWidth = Screen.PrimaryScreen.Bounds.Width;
private double screenHeight = Screen.PrimaryScreen.Bounds.Height;
private void FitWindowFormToScreen() {
this.ClientSize = new Size
(   Convert.ToInt32(screenWidth),
Convert.ToInt32(screenHeight)
);
}

也可以缩放组件

您首先需要计算屏幕大小与原始Form大小的比率,您在此设计布局。分母可以只用数字表示,因为只需要定义一次。

double xShift = screenWidth / 816;
double yShift = screenHeight / 489;

这些可以用作Form上的所有控件的缩放因子。为了在foreach循环中重新调整LocationSize属性,我建议定义一个单独的方法:

private void ScaleLayout(Control container) {
foreach (Control control in container.Controls) {
control.Location = new Point
(   Convert.ToInt32(control.Location.X * xShift),
Convert.ToInt32(control.Location.Y * yShift)
);
control.Size = new Size
(   Convert.ToInt32(control.Size.Width * xShift),
Convert.ToInt32(control.Size.Height * yShift)
);
}
}

这个函数接受形参是有原因的;位于容器控件(如GroupBoxTabControl对象)内部的控件不受影响。因此,您可以使用这样的递归调用:

if (control.HasChildren) {
ScaleLayout(control);
}

要调用这个方法,只需:

ScaleLayout(this);

最新更新