实现方式主要是利用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<string,string> dicControlsAttribute = new Dictionary<string,string>();
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、效果测试
总结以上是内存溢出为你收集整理的C#实现窗体中的各个控件同比自动放缩大小全部内容,希望文章能够帮你解决C#实现窗体中的各个控件同比自动放缩大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)