C# WinForm窗体及其控件的自适应

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C# WinForm窗体及其控件的自适应

C# WinForm窗体及其控件自适应各种屏幕分辨率

一。说明

我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标。

在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化。为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗体和其控件的初始位置和大小,2.根据窗体变化了的大小,成比例地实现其控件的水平和垂直方向的变化,也就是自适应。

二。使用方法

使用方法很简单,

1.把自适应的类整体复制到你的工程命名空间里,

然后在需要自适应的窗体中做3步即可:

2.声明自适应类实例。

3.为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件初始位置和大小

4.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应

三。完整代码如下:

(一)。自适应窗体的代码:

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

//1.声明自适应类实例

AutoSizeFormClass asc = new AutoSizeFormClass();

public Form1()

{

InitializeComponent();

}

//2. 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小

private void Form1_Load(object sender, EventArgs e)

{

asc.controllInitializeSize(this);

}

//3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应

private void Form1_SizeChanged(object sender, EventArgs e)

{

asc.controlAutoSize(this);

}

}

}

(二)。自适应类的代码

using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

namespace WindowsApplication1

{

class AutoSizeFormClass

{

//(1).声明结构,只记录窗体和其控件的初始位置和大小。

public struct controlRect

{

public int Left;

public int Top;

public int Width;

public int Height;

}

//(2).声明 1个对象

//注意这里不能使用控件列表记录 List nCtrl;,因为控件的关联性,记录的始终是当前的大小。

public List oldCtrl;

//int ctrl_first = 0;

//(3). 创建两个函数

//(3.1)记录窗体和其控件的初始位置和大小,

public void controllInitializeSize(Form mForm)

{

// if (ctrl_first == 0)

{

// ctrl_first = 1;

oldCtrl = new List();

controlRect cR;

cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;

oldCtrl.Add(cR);

foreach (Control c in mForm.Controls)

{

controlRect objCtrl;

objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height;

oldCtrl.Add(objCtrl);

}

}

// this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化

//0 - Normalize , 1 - Minimize,2- Maximize

}

//(3.2)控件自适应大小,

public void controlAutoSize(Form mForm)

{

//int wLeft0 = oldCtrl[0].Left; ;//窗体最初的位置

//int wTop0 = oldCtrl[0].Top;

////int wLeft1 = this.Left;//窗体当前的位置

//int wTop1 = this.Top;

float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体

float hScale = (float)mForm.Height /

(float)oldCtrl[0].Height;//.Height;

int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;

相关文档
最新文档