Winform放大所有控件的大小,并保持控件相对位置不变

本文介绍了一个用于窗体控件按比例缩放的C#函数,包括获取窗体控件、放大控件尺寸和位置的逻辑,并递归处理子控件。同时,提到了该方法的适用场景、限制以及调用时机的注意点,适用于需要自定义窗体布局调整的场景。
摘要由CSDN通过智能技术生成

思路

逻辑很简单:
1、传入一个窗体(Form),获取它的所有控件(Control);
2、将这些控件的SizeLocation按照相同的比例放大;
3、如果控件具有子控件(如GroupBox),递归调用放大函数;
4、将窗体的Size放大。
需要注意的几点:
1、SizeWidth,HeightLocationX,Y是只读的,想要修改就只能new一个Size/Point赋值给它们;
2、部分已经设置为依托父控件的控件可能不适用这一方法;
3、放大的效果并不会有多好,只能在特定场景下使用;
4、需要格外注意调用的时机,多次调用会导致窗体布局失真。

代码

这里提供一套已经封装好的函数:

public static void EnlargeForm(Form form, double bit)
{
	if (bit == 1.0) { return; }

	List<Control> controls = form.Controls.Cast<Control>().ToList();

	foreach (Control c in controls)
	{
		c.Size = new Size((int)(c.Size.Width * bit), (int)(c.Size.Height * bit));
		c.Location = new Point((int)(c.Location.X * bit), (int)(c.Location.Y * bit));
		if (c.HasChildren)
		{
			EnlargeControls(c, bit);
		}
	}

	form.Size = new Size((int)(form.Size.Width * bit), (int)(form.Size.Height * bit));
}
private static void EnlargeControls(Control cont, double bit)
{
	List<Control> controls = cont.Controls.Cast<Control>().ToList();
	foreach (Control c in controls)
	{
		c.Size = new Size((int)(c.Size.Width * bit), (int)(c.Size.Height * bit));
		c.Location = new Point((int)(c.Location.X * bit), (int)(c.Location.Y * bit));
		if (c.HasChildren)
		{
			EnlargeControls(c, bit);
		}
	}
}

调用时在窗体Load事件时进行:

double bit = 1.2; // 放大或缩小的倍数
EnlargeForm(this, bit);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值