我是window窗体开发的新手,在开发了一些窗体后,我注意到窗体在不同的分辨率下不能正确显示,在某些分辨率下窗体超出屏幕
我想知道有没有可以根据分辨率自动调整表单的设置,或者有什么技巧或技巧可以用来设计表单。
请详细说明您的答案,因为我对windows窗体开发非常熟悉。
谢谢
发布于 2014-03-20 00:38:07
这里的问题更有可能是它没有按照您预期的方式工作。在WinForms开发中,当您设计一个窗体时,实际上是在设置它的大小。这遵循正在显示表单的机器上的默认字体大小的函数,并且与所讨论的显示器上的分辨率没有直接关系。因此,如果您设计一个包含多个控件或大型控件的大型窗体,它可能在高分辨率下显示良好,但在低分辨率下显示不佳。要更好地了解此大小,请查看您的Form1.Designer.cs文件,您将看到为控件设置的大小值。这些大小并不等同于像素,但它们应该给你一个相对的大小。您可能还应该在MSDN或其他地方研究对话单元。
您可以在form load事件中编写一些代码来响应该解析,但最终大小将受到需要显示的小部件数量的部分限制。如果您有一个多行编辑字段、网格控件、树控件或其他一些大的小部件,您可以根据当前的显示分辨率自动调整它的大小,同时调整窗口的大小。但这是一个基于你的需求的特定于应用程序的决定,这就是为什么windows不会尝试自动调整大小。
如上所述,WPF提供了更灵活的表单定义模型,并且可以更好地响应重新对齐小部件,但最终如果您的表单足够忙,WPF表单在较低的分辨率上也会出现同样的问题。
发布于 2015-11-16 00:00:40
你可以在load事件中循环窗体上的每个控件,并重新缩放它们和窗体本身,缩放比例是为其设计窗体的屏幕尺寸与应用程序正在处理的屏幕尺寸之间的比率。
//this is a utility static class
public static class Utility{
public static void fitFormToScreen(Form form, int h, int w)
{
//scale the form to the current screen resolution
form.Height = (int)((float)form.Height * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));
form.Width = (int)((float)form.Width * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
//here font is scaled like width
form.Font = new Font(form.Font.FontFamily, form.Font.Size * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
foreach (Control item in form.Controls)
{
fitControlsToScreen(item, h, w);
}
}
static void fitControlsToScreen(Control cntrl, int h, int w)
{
if (Screen.PrimaryScreen.Bounds.Size.Height != h)
{
cntrl.Height = (int)((float)cntrl.Height * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));
cntrl.Top = (int)((float)cntrl.Top * ((float)Screen.PrimaryScreen.Bounds.Size.Height / (float)h));
}
if (Screen.PrimaryScreen.Bounds.Size.Width != w)
{
cntrl.Width = (int)((float)cntrl.Width * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
cntrl.Left = (int)((float)cntrl.Left * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
cntrl.Font = new Font(cntrl.Font.FontFamily, cntrl.Font.Size * ((float)Screen.PrimaryScreen.Bounds.Size.Width / (float)w));
}
foreach (Control item in cntrl.Controls)
{
fitControlsToScreen(item, h, w);
}
}
}
//inside form load event
//send the width and height of the screen you designed the form for
Utility.fitFormToScreen(this, 788, 1280);
this.CenterToScreen();https://stackoverflow.com/questions/22480272
复制相似问题