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

         float X, Y;//X表示窗体的宽度,Y表示窗体的高度
private void Form1_Load(object sender, EventArgs e)
{
//this.Resize += new EventHandler(Form1_Resize);
X = this.Width;//赋值初始窗体宽度
Y = this.Height;//赋值初始窗体高度
setTag(this);
}
/// <summary>
/// 调整控件大小时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Resize(object sender, EventArgs e)
{
float newX = this.Width / X;//获取当前宽度与初始宽度的比例
float newY = this.Height / Y;//获取当前高度与初始高度的比例
setControls(newX, newY, this);
this.Text = "窗体宽:" + this.Width.ToString() + " 窗体高:" + this.Height.ToString();//窗体标题栏
}
/// <summary>
/// 获取控件的width、height、left、top、字体大小的值
/// </summary>
/// <param name="cons">要获取信息的控件</param>
private void setTag(Control cons)
{//遍历窗体中的控件
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
//if (con.Controls.Count > 0)
//{
// setTag(con);
//}
}
}
/// <summary>
/// 根据窗体大小调整控件大小
/// </summary>
/// <param name="newX"></param>
/// <param name="newY"></param>
/// <param name="cons"></param>
private void setControls(float newX, float newY, Control cons)
{
//遍历窗体中的控件,重新设置控件的值
foreach (Control con in cons.Controls)
{
string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值,并分割后存储字符串数组 float a = Convert.ToSingle(mytag[]) * newX;//根据窗体缩放比例确定控件的值,宽度//89*300
con.Width = (int)(a);//宽度 a = Convert.ToSingle(mytag[]) * newY;//根据窗体缩放比例确定控件的值,高度//12*300
con.Height = (int)(a);//高度 a = Convert.ToSingle(mytag[]) * newX;//根据窗体缩放比例确定控件的值,左边距离//
con.Left = (int)(a);//左边距离 a = Convert.ToSingle(mytag[]) * newY;//根据窗体缩放比例确定控件的值,上边缘距离
con.Top = (int)(a);//上边缘距离 Single currentSize = Convert.ToSingle(mytag[]) * newY;//根据窗体缩放比例确定控件的值,字体大小
con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);//字体大小 //if (con.Controls.Count > 0)
//{
// setControls(newX, newY, con);
//} //Remarks:
//控件当前宽度:控件初始宽度=窗体当前宽度:窗体初始宽度
//控件当前宽度=控件初始宽度*(窗体当前宽度/窗体初始宽度)
}
}

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


Winform 窗体控件随窗体自动(等比例)调整大小的更多相关文章

  1. winform groupbox控件放到窗体中间位置

    1. 在Form中放一个控件,让其在启动时始终居中 int gLeft = this.Width / 2 - groupControl1.Width / 2; int gTop = this.Heig ...

  2. C# 解决winform 窗体控件在窗体变化时闪烁的问题

    在窗体form代码中加入如下代码即可: protected override CreateParams CreateParams { get { CreateParams cp = base.Crea ...

  3. C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)

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

  4. 【Winfrom-适配窗体】 WinForm窗体及其控件的自适应,控件随着窗体变化

    在Winform中,窗体最大化之后,控件仍然保持原来的大小,就会显得不好看,那么有什么办法让控件跟着窗体变化吗? 在需要自适应的Form中代码如下:(AutoSizeFormClass.cs源码在下方 ...

  5. C# winform 跨线程更改窗体控件的属性

    当winform程序中新开一个线程,是无法改变主线程中窗体控件的属性的,否则运行时会报错. 若想在其他线程中控制主线程中的窗体控件,则必须利用BeginInvoke方法. 例如:添加一个名为textb ...

  6. winform窗体控件(全)

    回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...

  7. 【2017-04-25】winform公共控件、菜单和工具栏、Tab和无边框窗体制作

    一.公共控件 1. Button   按钮 + 布局 - AutoSize   按钮尺寸自动适应里面内容的长度 - Location    位置 - Margin       控件与控件外边距 - S ...

  8. C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法

    C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...

  9. C# WinForm窗体控件GroupBox修改边框颜色控件

    C# WinForm窗体控件GroupBox修改边框颜色控件 1.新建组件这里可以自定义一个GroupBox控件起名为GroupBoxEx 2.增加一个BoderColor属性 private Col ...

随机推荐

  1. ListView addHeaderView 对 position 的影响

    1. 在 public View getView(int position, View convertView, ViewGroup parent) 中position 和 是否有headerView ...

  2. Linux的nm查看动态和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  3. Java lamda Stream

    Intermediate:一个流可以后面跟随零个或多个 intermediate 操作.其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用.这类操作都是惰性化的( ...

  4. VS2010统计代码行数 [转]

    按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容:  ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头 和 /开头 或者 空行 都不计入代 ...

  5. Java 如何将String转化为Int

    在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. 例1: 1 2 3 4 5 6 S ...

  6. 由于C++编译器的分析机制所导致的声明问题

    假设我们想声明一个STL的vector类型的变量,读入文件里的信息: std::ifstream in("data.txt"); std::vector<int> da ...

  7. msqlserver 千万级别单表数据去掉重复记录使用临时表

    由于上周末小写把数据数据重复写入数据库,没办法,得去重! 最新使用的语句: use data set nocount ondelete DoRecordProperty from( select TI ...

  8. Talk about VR

    Virtual reality --VR ,虚拟现实,是利用计算机模拟一个三维空间的世界,提供用户关于各种感官的模拟,让用户感觉身临其境,可以及时,没有限制地观察三维空间内的事物,用户进行位置移动时, ...

  9. linux命令-dd {拷贝并替换}

    一 命令解释: dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: if=文 ...

  10. Unreal Engine 4 一些小技巧或提示

    怎样获取当前地图的名字 在任意Actor类里,GetWorld()->GetName()就可以获得当前地图的名字