但是字体不缩放。
不要告诉我用控件的Dock和Anchor属性,当窗体控件特别多的时候,如果达到同时缩放以及位置相应改变,这两个属性设起来很麻烦,而且不一定能实现。记得以前下载过这样的控件,现在忘了叫什么名字来了。谢谢!

解决方案 »

  1.   

    1、通过程序设计来布局,而不是通过拖放来布局。
    2、通过动态计算来获得控件的位置与大小。
    3、为简便,可将窗体利用panel控件分成数行。然后计算每一行的控件的大小与位置。
      

  2.   

    hw256(duck):
    大哥,计算很麻烦吧,每个窗体布局都不一样,每个窗体都来计算一遍,会类似人的,而且以后维护起来删除或添加一个控件,这个算法又得改...lingfeng0626(网络游侠):
    mapInfo应该很大吧?
      

  3.   

    只能动态计算.
    获得当前窗口变化比例,
    一个以control为参数的函数,然后在contols集合中按比例计算.
      

  4.   

    代码片断:
    private void allchange(Control control,float wrate,float hrate)
    {
    int x = Convert.ToInt16(wrate*control.Bounds.X);
    int y = Convert.ToInt16(hrate*control.Bounds.Y);
    int height = Convert.ToInt16(hrate*control.Bounds.Height);
    int width = Convert.ToInt16(wrate*control.Bounds.Width);
    control.Bounds = new Rectangle(x,y,width,height);
    }private void Form1_SizeChanged(object sender, EventArgs e)
    {
    float wrate = this.Width/(float)width;
    float hrate = this.Height/(float)height;
    width = this.Width;
    height = this.Height;
    for (int i=0;i<this.Controls.Count;i++)
    {
    allchange(this.Controls[i],wrate,hrate);
    }
    }需要保存当前窗口的大小:
     在构造函数中:
    width = this.Width;
    height = this.Height;
      

  5.   

    okkk(see you) :
    谢谢老兄,但是,不仅仅放大缩小这么简单吧,还有位置的变化,比方说:一行有多个文本框,后面的文本框除了改变大小外,还要改变位置;还有:label控件我不想放大缩小,某些文本框高度不想放大缩小等等。我记得原先我用的那个组件可以对每个控件设置不同的放大缩小方式,而且可以设置控件放大缩小不仅相对于窗体放大缩小,而且还可以根据周边其他控件进行放大缩小等。
    但不知道那个控件去哪儿了,郁闷!
      

  6.   

    http://community.csdn.net/Expert/topic/4006/4006132.xml?temp=.7047541
      

  7.   

    呵呵,关于位置,试试就知道了。
    我上面说的就是这个问题,原来控件的大小如果不同,等比例放大缩小后,右下角对不齐了.
    因为这里我们只关心了左上角的位置变化,和长与宽的变化.就是说这里保证了左上角的比例,但右下角的比例不能保证,我想无论怎么样.按比例缩防后都有这个问题,只能看我们关注那里了.allchange函数中可以用一定的算法保证不同的对齐点,比如四个角,中心点等等.要控制那些类型的控件不缩放在allchange函数的参数中需要传递gettype类型,然后width和height的变化随gettype值的不同而不同。
      

  8.   

    okkk(see you) :
    确实如你所说,你的方法可以改变位置,加类型也可以处理,如果对控件里的控件再处理一下就好了(即控件里的控件也跟着缩放,如GroupBox里的Panel里的控件...)也不是所有控件的位置都改变,如第一列的Label位置我不想改变,第一行的控件的Top值也不想改变等等
    还有,通过类型过滤也不一定就能搞定的,有的TextBox只在宽度上缩放,有的TextBox在长宽上都可以缩放,而且不同的窗体,设置的控件都不一样,缩写写成汉数还不是最好的方法
      

  9.   

    okkk(see you) :
    确实如你所说,你的方法可以改变位置,加类型也可以处理,如果对控件里的控件再处理一下就好了(即控件里的控件也跟着缩放,如GroupBox里的Panel里的控件...)也不是所有控件的位置都改变,如第一列的Label位置我不想改变,第一行的控件的Top值也不想改变等等
    还有,通过类型过滤也不一定就能搞定的,有的TextBox只在宽度上缩放,有的TextBox在长宽上都可以缩放,而且不同的窗体,设置的控件都不一样,缩写写成汉数还不是最好的方法