[原]C#按比例缩放窗体控件及字体

按照比例缩放窗体控件及字体,如需等比例缩放,只需将x,y的比例设置成相同即可。

为了减小误差,建议使用原始尺寸来计算比例。

 1 private float X, Y;
 2
 3         private bool b = false;
 4
 5         public MainForm()
 6         {
 7             InitializeComponent();
 8
 9             X = this.Width;
10             Y = this.Height;
11
12             SetTag(this);
13
14             b = true;
15         }
16
17         protected override void OnSizeChanged(EventArgs e)
18         {
19             if (!b) return;
20
21             float newx = (this.Width) / X;
22             float newy = this.Height / Y;
23             SetControls(newx, newx, this);
24
25             base.OnSizeChanged(e);
26         }
27
28         /// <summary>
29         /// 存储原始控件参数
30         /// </summary>
31         /// <param name="cons"></param>
32         private void SetTag(Control cons)
33         {
34             foreach (Control con in cons.Controls)
35             {
36                 con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
37                 if (con.Controls.Count > 0)
38                     SetTag(con);
39             }
40         }
41
42         /// <summary>
43         /// 按照比例缩放控件大小及字体
44         /// </summary>
45         /// <param name="newx"></param>
46         /// <param name="newy"></param>
47         /// <param name="cons"></param>
48         private void SetControls(float newx, float newy, Control cons)
49         {
50             foreach (Control con in cons.Controls)
51             {
52                 string[] mytag = con.Tag.ToString().Split(new char[] { ‘:‘ });
53                 int width = (int)(Convert.ToSingle(mytag[0]) * newx);
54                 int height = (int)(Convert.ToSingle(mytag[1]) * newy);
55                 int x = (int)(Convert.ToSingle(mytag[2]) * newx);
56                 int y = (int)(Convert.ToSingle(mytag[3]) * newy);
57                 con.Location = new Point(x, y);
58                 con.Size = new System.Drawing.Size(width, height);
59                 Single currentSize = Convert.ToSingle(mytag[4]) * newy;
60                 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
61
62                 if (con.Controls.Count > 0)
63                 {
64                     SetControls(newx, newy, con);
65                 }
66             }
67         }

代码

时间: 2024-11-11 06:23:37

[原]C#按比例缩放窗体控件及字体的相关文章

Qt Creator 窗体控件自适应窗口大小布局(转)

常见的软件窗口大小改变(最大化.手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的.网上百度了很多,多数说的很含糊,还有很多是用程序实现的,既然已经有Qt Creator那么高集成度的工具了,我还是倾向于直接在Qt Creator中通过可视化配置的方式完成,一是所见即所得,而是效率要高不少. Qt中如果想实现窗体内空间随着窗体大小调整,必须使用布局管理,常用的布局管理有QHBoxLayout.QVBoxLayout.

Android ImageButton图像完全填充缩放到控件

如果你发现你写程序的时候像我一样,发现图片怎么都无法拉伸填充到ImageButton 里面.而且就算能缩放到控件,但是图像较小,而且总会在 ImageButton周围有一圈边框!当你遇到这一些列问题的这时候你就可以收藏并吸收这个经验了. 总的过程:我先给出关键代码→ 分析给出的两种解决方案→ 我详细介绍一下边框出现的原因个解决办法.→ 最后就是些注意事项了 工具/原料 遇到问题尽可能冷静下来的心情. 记住收藏好我这条经验. ImageButton的长宽最好是固定的.注意事项里面我会告诉你为什么

用于列出选项的Windows窗体控件

可以提供选项列表的控件有ListBox.ComboBox.CheckedListBox,如何正确的使用和选择这些控件,下面对此进行讨论.首先对这三种控件的功能分别进行说明: ListBox ListBox用于显示项列表,用户可以从中选择一项或多项.如果项目总数超出可以显式的项目数,则ListBox会自动添加滚动条.当MultiColumn属性为true时,列表框以多列形式显示条目,并且会出现一个水平滚动条.当MultiColumn为false时,列表框以单列形式显示条目,并且会出现一个垂直滚动条

C#编写第三方控件,实现窗体控件的一键取值

上篇博客中讲到了利用编写第三方控件的方法,实现给窗体控件的Text属性赋值,比如说:TextBox,Combox等.有赋值,当然也有取值操作.从窗体的控件中取值,然后存入变量或者实体属性当中,传入到数据访问层进行添加,更新等操作也是我们经常使用的.如何实现一键取值呢? 使用的方法在上篇博客中已经做了详细说明,这里就不再累述了. 代码写在这里: 该方法的作用是,遍历传入窗体中的控件,并且获取其值赋给实体类的相应属性. /// <summary> /// 从窗体控件取值,填充到学生实体类中 ///

C#编写第三方控件,实现窗体控件的一键赋值

. 事出有因 在写程序的时候,经常会写上面这样的代码,把查询的结果显示到窗体上,我们怎么做的呢? 一行一行的进行赋值,这样的代码写起来最枯燥,而且还容易出错.大家有没有发现,上面的代码都在做相同的事情-赋值.相类似的代码写了三遍以上,就要考虑是不是能对这个过程进行封装.封装出一个方法,帮我们自动完成这些重复性的操作. 思考过程 所接触项目中也有写好的类似方法.只是它涉及到了很多其它的方法,一个套一个,抽离出来特别不方便.而且还有几个令人不爽的地方: 第一是,控件在命名的时候必须和相对应实体属性相

如何跨线程调用Windows窗体控件

通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它.那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件.下面将上一个例子进行一下改动.代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using Sys

C#窗体控件拖动

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms; namespace 窗体控件移动{public partial class Form1

遍历winform 窗体控件

//遍历窗体控件并给控件赋值        private void Control_Load(object sender, EventArgs e)        {            foreach (Control Ctr in this.Controls)            {                if (Ctr is System.Windows.Forms.CheckBox)                {                    checkBox1

C#遍历窗体控件(原文出自http://www.liangshunet.com/ca/201403/286434593.htm)

一.C#遍历窗体控件 主要遍历属于窗体(Form)的控件(Controls),假如窗体中有 Panel.Button 和 TextBox 控件,遍历代码如下: /// <summary> /// Winform C#遍历窗体控件 /// </summary> /// <param name="ctrlName">控件名称</param> public void ForeachFormControls(string ctrlName) {