winform 中控件按分辨率 比例缩放
窗口初始化后:
点击查看代码
//获取窗口的大小,Tag随便保存的,也可以定义变量保存
this.Tag = this.Width.ToString() + "," + this.Height.ToString();
//这一步很重要,不能隐式的去生成这个事件,就是不能直接在属性栏里面双击自动生成,
//因为这个SizeChanged比获取窗口大小提前执行,不然会空引用异常。
//InitializeComponent(),组件初始化,这个必须先执行,会触发SizeChanged,窗体大小
this.SizeChanged += new EventHandler(Form1_SizeChanged);
Form1_SizeChanged事件
点击查看代码
public static void Form1_SizeChanged(object sender, EventArgs e)
{
//这一步不必多说
string[] tmp = ((Form)sender).Tag.ToString().Split(',');
//比例因子
float width = (float)((Form)sender).Width / (float)Convert.ToInt16(tmp[0]);
float heigth = (float)((Form)sender).Height / (float)Convert.ToInt16(tmp[1]);
//保存变化后的大小,下一次再根据这个求比例因子
((Form)sender).Tag = ((Form)sender).Width.ToString() + "," + ((Form)sender).Height;
//根据比例因子,重绘所有控件
foreach (Control control in ((Form)sender).Controls)
{
control.Scale(new SizeF(width, heigth));
}
}