//(3.2)控件自适应大小, public void controlAutoSize(Control mForm) { if (ctrlNo == 0) { //*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少 //*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成 controlRect cR = new controlRect(); // cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height; oldCtrl.Add(cR); //第一个为"窗体本身",只加入一次即可 AddControl(mForm); //窗体内其余控件可能嵌套其它控件(比如panel),故单独抽出以便递归调用 } float wScale = (float)mForm.Width / (float)oldCtrl[0].Width; //新旧窗体之间的比例,与最早的旧窗体 float hScale = (float)mForm.Height / (float)oldCtrl[0].Height; //.Height; ctrlNo = 1; //进入=1,第0个为窗体本身,窗体内的控件,从序号1开始 AutoScaleControl(mForm, wScale, hScale); //窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 }
private void insertDictionary(String name, controlRect cr) //添加控件名和位置,如果名称重复则更新 { Dictionary <String, controlRect> temp = new Dictionary <String, controlRect>(); bool flag = false; foreach (var pair in oldCtrl) { if (pair.Key.ToString() == name) { temp.Add(name, cr); flag = true; } } if (flag == false) { oldCtrl.Add(name, cr); } foreach (var value in temp) { oldCtrl.Remove(value.Key.ToString()); oldCtrl.Add(value.Key, value.Value); } temp.Clear(); }