欢迎来到福编程网,本站提供各种互联网专业知识!
您的位置:网站首页 > 数据库 > MongoDB

C#实现窗体中的各个控件同比自动放缩大小

发布时间:2014-10-13 作者:投稿junjie 来源:转载
这篇文章主要介绍了C#实现窗体中的各个控件同比自动放缩大小,实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩,需要的朋友可以参考下

实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩。

简要步骤如下:

1、创建C#窗体程序项目。

2、Panel放置到窗体。

3、设置属性dock为fill。

4、注意MinnumSize不能设置为0, 改成大于0都行。

复制代码 代码如下:

public partial class FrmDemo : Form

{

double dFrmWidth;

double dFrmHeight;

double dZoomHorizon;

double dZoomVerticality;

Dictionary dicControlsAttribute = new Dictionary();

protected void GetAllInitiateContrlInfo(Control CrlContainer)

{

if (CrlContainer.Parent == this)

{

dFrmWidth = Convert.ToDouble(CrlContainer.Width);

dFrmHeight = Convert.ToDouble(CrlContainer.Height);

}

foreach (Control item in CrlContainer.Controls)

{

if (item.Name.Trim() != "")

dicControlsAttribute.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2)

+ "," + item.Width + "," + item.Height + "," + item.Font.Size);

if ((item as UserControl) == null && item.Controls.Count > 0)

GetAllInitiateContrlInfo(item);

}

}

private void ChangeControlsInitiate(Control CrlContainer)

{

dZoomHorizon = (Convert.ToDouble(CrlContainer.Width) / dFrmWidth);

dZoomVerticality = (Convert.ToDouble(CrlContainer.Height) / dFrmHeight);

}

private void ChangeCurrentControlAttr(Control CrlContainer)

{

double[] dPosition = new double[5];

foreach (Control item in CrlContainer.Controls)

{

if (item.Name.Trim() != "")

{

if ((item as UserControl) == null && item.Controls.Count > 0)

ChangeCurrentControlAttr(item);

string[] strs = dicControlsAttribute[item.Name].Split(',');

for (int j = 0; j < 5; j++)

{

dPosition[j] = Convert.ToDouble(strs[j]);

}

double itemWidth = dPosition[2] * dZoomHorizon;

double itemHeight = dPosition[3] * dZoomVerticality;

item.Left = Convert.ToInt32(dPosition[0] * dZoomHorizon - itemWidth / 2);

item.Top = Convert.ToInt32(dPosition[1] * dZoomVerticality - itemHeight / 2);

item.Width = Convert.ToInt32(itemWidth);

item.Height = Convert.ToInt32(itemHeight);

//item.Font = new Font(item.Font.Name, float.Parse

//((dPosition[4] * Math.Min(dZoomHorizon, dZoomVerticality)).ToString()));

//字体也可以实现同比放缩。

}

}

}

protected override void OnSizeChanged(EventArgs e)

{

base.OnSizeChanged(e);

if (dicControlsAttribute.Count > 0)

{

ChangeControlsInitiate(this.Controls[0]);

ChangeCurrentControlAttr(this.Controls[0]);

}

}

public FrmDemo()

{

InitializeComponent();

GetAllInitiateContrlInfo(this.Controls[0]);//构造函数里面调用即可。

}

}

5、效果测试

相关推荐