winform窗体控件随窗体自动(等比例)调整大小

西枫叶落 西枫叶落     2022-08-05     852

关键词:

新建窗体程序了,添加窗体事件Load(加载窗体时)、Resize(调整控件大小时)。自定义方法setTag(获取控件的width、height、left、top、字体大小等信息的值)、setControls(根据窗体大小调整控件大小)。

 1         float X, Y;//X表示窗体的宽度,Y表示窗体的高度
 2         private void Form1_Load(object sender, EventArgs e)
 3         {
 4             //this.Resize += new EventHandler(Form1_Resize);
 5             X = this.Width;//赋值初始窗体宽度
 6             Y = this.Height;//赋值初始窗体高度
 7             setTag(this);
 8         }
 9         /// <summary>
10         /// 调整控件大小时
11         /// </summary>
12         /// <param name="sender"></param>
13         /// <param name="e"></param>
14         private void Form1_Resize(object sender, EventArgs e)
15         {
16             float newX = this.Width / X;//获取当前宽度与初始宽度的比例
17             float newY = this.Height / Y;//获取当前高度与初始高度的比例
18             setControls(newX, newY, this);
19             this.Text = "窗体宽:" + this.Width.ToString() + " 窗体高:" + this.Height.ToString();//窗体标题栏
20         }
21         /// <summary>
22         /// 获取控件的width、height、left、top、字体大小的值
23         /// </summary>
24         /// <param name="cons">要获取信息的控件</param>
25         private void setTag(Control cons)
26         {//遍历窗体中的控件
27             foreach (Control con in cons.Controls)
28             {
29                 con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
30                 //if (con.Controls.Count > 0)
31                 //{
32                 //    setTag(con);
33                 //}
34             }
35         }
36         /// <summary>
37         /// 根据窗体大小调整控件大小
38         /// </summary>
39         /// <param name="newX"></param>
40         /// <param name="newY"></param>
41         /// <param name="cons"></param>
42         private void setControls(float newX, float newY, Control cons)
43         {
44             //遍历窗体中的控件,重新设置控件的值
45             foreach (Control con in cons.Controls)
46             {
47                 string[] mytag = con.Tag.ToString().Split(new char[] { : });//获取控件的Tag属性值,并分割后存储字符串数组
48 
49                 float a = Convert.ToSingle(mytag[0]) * newX;//根据窗体缩放比例确定控件的值,宽度//89*300
50                 con.Width = (int)(a);//宽度
51 
52                 a = Convert.ToSingle(mytag[1]) * newY;//根据窗体缩放比例确定控件的值,高度//12*300
53                 con.Height = (int)(a);//高度
54 
55                 a = Convert.ToSingle(mytag[2]) * newX;//根据窗体缩放比例确定控件的值,左边距离//
56                 con.Left = (int)(a);//左边距离
57 
58                 a = Convert.ToSingle(mytag[3]) * newY;//根据窗体缩放比例确定控件的值,上边缘距离
59                 con.Top = (int)(a);//上边缘距离
60 
61                 Single currentSize = Convert.ToSingle(mytag[4]) * newY;//根据窗体缩放比例确定控件的值,字体大小
62                 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);//字体大小
63 
64                 //if (con.Controls.Count > 0)
65                 //{
66                 //    setControls(newX, newY, con);
67                 //}
68 
69                 //Remarks:
70                 //控件当前宽度:控件初始宽度=窗体当前宽度:窗体初始高度
71                 //控件当前宽度=控件初始宽度*(窗体当前宽度/窗体初始高度)
72             }
73         }

 

参考借鉴:http://jingyan.baidu.com/article/77b8dc7fe801006174eab6db.html

 

winform开发中实现控件随窗体大小的改变而自动适应其改变

在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性。Anchor属性定义控件的定位点位置。当控件锚定到某个窗体时,如果该窗... 查看详情

winform开发中实现控件随窗体大小的改变而自动适应其改变

在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性。Anchor属性定义控件的定位点位置。当控件锚定到某个窗体时,如果该窗... 查看详情

vb运行时如何使picture控件随窗体放大缩小

我在PictureBox里画实时曲线,问题是在运行时,当鼠标点窗体右下角调整其大小时,怎样才能让picture控件及曲线等比例放大或缩小呢?请前辈们指点。参考技术A在窗体Resize事件中根据窗体的宽度改变控件的宽高就行了。例如PrivateS... 查看详情

c#winform关于页面大小与控件大小的问题

窗体页面设置了windowState的Maximized的属性。打开软件肯定是最大屏幕,根据显示屏分辨率自动调整最大化。但是这样一来,页面的控件就出现了大小问题。如果我现在是19寸显示器开发的软件,窗体页面最大化没问题。我可以把... 查看详情

.net中如何动态改变label控件的位置

我在Winform中有一个Label控件我想要它随着窗体的Resize而动态调整在窗体中的位置本来我打算在Form的Resize事件中将Label.Location.X和Label.Location.Y的值设成宽度和高度的一半来使它居中但是编译时报错说Location不能赋值不是变量那请问... 查看详情

c#winform关于页面大小与控件大小的问题

...能自调节的。 参考技术B刚刚试了一下在vs2010里新建一个winform,运行,生成的exe只有7k,已经很小了,以后你添加了什么自己不都知道吗?添加类对其影响很小,添加资源影响是最大的,因为资源是嵌入程序集了。 查看详情

winform主窗体被子窗体影响而缩小?

winform程序,主窗体默认为全屏显示,通过点击主窗体的按钮,我打开一个子窗体,此时在某些电脑上会出现异常,表现为主窗体缩小成屏幕一半;我子窗体上,有图片,ElementHost(嵌入WPF的空间)控件;请问大佬们,我应该怎么弄... 查看详情

c#控件的位置和大小随窗体大小的变化而变化

如图,在设计的时候按钮是在窗体正中央,然后运行之后点最大化,按钮并不在正中央,应该怎么做?要是很多控件都要联系在一起随着窗体变化而变化呢?设计视图时将控件放置再你需要的位置Dock属性为NoneAnchor属性为None则该... 查看详情

在winforms c#中自动调整项目/控件的大小显示错误

】在winformsc#中自动调整项目/控件的大小显示错误【英文标题】:Autoresizingitems/controlsinwinformsc#showingerror【发布时间】:2022-01-0503:41:51【问题描述】:我一直在尝试让我的windows窗体应用程序自动调整大小,即当用户调整应用程序... 查看详情

winform窗体控件设计时的位置到运行后怎么发生了变化

如果是窗体里面的控件设计与运行时位置不一样,那么看看那些控件的Anchor属性,一般是由这个属性引起,它可以自动根据窗体的大小调整控件的位置。如果是窗体运行时的位置不一样,那么看窗体的StartPosition属性,其中CenterSc... 查看详情

winform窗体基本属性

窗体是程序与用户交互的可视界面,窗体也是对象,窗体类定义了生成窗体的模版,实例化一个窗体类就产生了一个窗体。.NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有窗体类的基类。常用属性:(一)布局:AutoS... 查看详情

vb中如何使窗体和控件的相对位置不发生改变

在最大化时控件和窗体的位置很不好看,怎样才能时他们的相对位置不发生改变,谢谢了!窗体的borderstyle中的1-fixedsingle属性就可以了,,选了这个窗口不能最大化,无法调整了参考技术APrivateSubForm_Resize()...'在这里调整你窗... 查看详情

winform控件大小随着窗体自适应

3个方法:#region改变控件大小//获取控件原始信息protectedvoidGetAllInitInfo(ControlctrlContainer)//inttempWidth=Screen.PrimaryScreen.Bounds.Width/5*4;//inttempHeight=Screen.PrimaryScreen.Bounds.Height/5*4;if(ctrlContain 查看详情

在设计器中调整窗体大小时停止移动锚定控件

...单大小而不移动任何锚定控件?我在VisualStudio2010中使用winforms。【问题讨论】:【参考方案1】:你必须知道什么时候可以作弊。打开表单的Designe 查看详情

怎样使delphi里的控件随窗体的大小变化而变化

就比如新建一个窗体,里面添加许多控件,窗体刚开始比较小,等最大化或者运行全屏时,控件的大小和位置一点都不变,显的很不对称。试了许多方法也不行,只有提问了。你应该在添加控件之前,先在窗体里面添加一些PANEL... 查看详情

delphi:窗体大小如何根据电脑屏幕自动调整窗体大小?

delphi:窗体大小如何根据电脑屏幕自动调整窗体大小?麻烦提供完整代码,谢谢利用Screen对象procedure TForm1.FormCreate(Sender: TObject);begin  Form1.Width := trunc(Screen.Width * 0.8);  Form1.Height := trunc(... 查看详情

winform窗体——布局方式

一、默认布局★可以加panel,也可以不加;★通过鼠标拖动控件的方式,根据自己的想法布局。拖动控件的过程中,会有对齐的线,方便操作;★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整各个控件大小... 查看详情

控件大小随窗体大小变化

MFC中当我们添加了很多控件后,布局就是一个很难控制的方面,当程序运行在不能的PC上就会有不一样的布局,如何解决呢方法很多,我第一次是自己算出控件的位置,然后按照比例缩放,但是方法很麻烦,还不易控制,后来一... 查看详情