最好是能够在一个地方统一设置,不然控件多了,就不好操作,不论是窗口最大化还是用户通过鼠标改变了窗体大小时让控件跟随窗体按比例缩放,另求一个问题,就是我有一个选项卡的地方,选项卡(里面有些控件)要是动态添加的,我想问一下有没有可以复制出一个相同的选项卡的方法,比如:TextBox txt = txt_Box(txt_Box是一个已经设置了许多属性的TextBox控件),这样不行,是引用赋值,像当于把txt_Box引用给txt,我要的new 一个和txt_Box相同的TextBox控件,不知道大家有办法没,我现在暂时使用的是用户控件实现,不过有点麻烦特别是需要事件和取值之类的操作。

解决方案 »

  1.   

    在改变大小前记录所有控件与窗体的比例存放在一个arraylist
    或是hashtable里.在窗体的改变大小事件里再次调用.进行重绘.
      

  2.   

    /// <summary>
            /// 自動縮放控件
            /// </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
      

  3.   

    不是有现存的table控件吗,放在里面就会自动缩放另外要设置控件的属性Dock=Fill
      

  4.   

    写一个能够自适应的控件继承Form,只有你的所有控件都继承这个类就好了;
    或者写一个能够自适应的方法,然后采用代理的方式去封装
      

  5.   

    只是控件还好办点,从FORM继承一个新的FORM,然后在Resize事件里
    递归修改.Controls的大小位置。但是如果Control的其他属性,比如字体啊,背景图片啊,什么的比较难处理