最好是能够在一个地方统一设置,不然控件多了,就不好操作,不论是窗口最大化还是用户通过鼠标改变了窗体大小时让控件跟随窗体按比例缩放,另求一个问题,就是我有一个选项卡的地方,选项卡(里面有些控件)要是动态添加的,我想问一下有没有可以复制出一个相同的选项卡的方法,比如:TextBox txt = txt_Box(txt_Box是一个已经设置了许多属性的TextBox控件),这样不行,是引用赋值,像当于把txt_Box引用给txt,我要的new 一个和txt_Box相同的TextBox控件,不知道大家有办法没,我现在暂时使用的是用户控件实现,不过有点麻烦特别是需要事件和取值之类的操作。
或是hashtable里.在窗体的改变大小事件里再次调用.进行重绘.
/// 自動縮放控件
/// </summary>
/// <param name="frm"></param>
public static void AutoScale(Form frm)
{
frm.Tag = frm.Width.ToString() + "," + frm.Height.ToString();
frm.SizeChanged += new EventHandler(frm_SizeChanged);
}
static void frm_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)); }
}在需要自动调整的窗体构造函数中调用一次AutoScale
或者写一个能够自适应的方法,然后采用代理的方式去封装
递归修改.Controls的大小位置。但是如果Control的其他属性,比如字体啊,背景图片啊,什么的比较难处理