新建窗体程序了,添加窗体事件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. Python入门5

    装饰器 装饰器英文Decorator,自身是一个函数,用来包装其它的函数,实现在不改变原来代码的情况下,增加新的功能,返回一个修改后的函数对象, 装饰器功能: 1.装饰器也是函数 2.在不改变原有代码 ...

  2. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  3. MSSQL MERGE语法

    Merge的用法 Merge可以完成以下功能: 1.    两个表之间数据的更新 2.    进行进销存更新库存 3.    进行表之间数据的复制 语法说明: 1.    在语句结束后一定要用分号,否 ...

  4. Oracle 存储过程 split 代码实现

    实现 字符串分割, 算法 如下: 算法 1: DECLARE remove_column myvarray_list; x ); sub ); i NUMBER; j NUMBER; c NUMBER ...

  5. 清除系统日志及数据库(sql server)日志最佳实践

    在一个项目中遇到的问题:系统日志过大,后来用delete语句删除了(相当的慢),结果数据库日志又变成很大了(差不多10G),所以又得把数据库日志删除. 方法: --备份系统中的部份日志--SELECT ...

  6. 功能强大的web打印控件lodop的使用

    打印是很多web系统都需要的功能,最近找到一款功能强大,使用简单,价格便宜的web打印工具Lodop,免费也能用,不过有水印,也不贵商业开发建议购买. 废话不多说,拿来就用,从简单的打印开始. 1.下 ...

  7. c++中的宏 #define _CLASSDEF(name) class name

    #include <iostream> using namespace std; #define _CLASSDEF(name) class name; \ typedef name * ...

  8. about Internet protocol

    <1> SSL版本 测试浏览器支持的SSL版本的网站: https://www.ssllabs.com/ssltest/viewMyClient.html 0xfefd    (DTLS ...

  9. 浏览器缓存相关的Http头介绍:Expires,Cache-Control,Last-Modified,ETag

    转自:http://www.path8.net/tn/archives/2745 缓存对于web开发有重要作用,尤其是大负荷web系统开发中. 缓存分很多种:服务器缓存,第三方缓存,浏览器缓存等.其中 ...

  10. Android—Work—1day

    1.view 跟Activity 的数据传递通过 adapter 实现. http://blog.csdn.net/tianfeng701/article/details/75578192.Activ ...