Winform form中控件的相对位置,当一个窗体最大化,最小化时,窗体中各种控件的位置会变的很不规则.
这种相对位置是在程序中定义的,我有一个大致的思路:就是写一个方法,将相关的窗体作为参数传入,然后在方法中遍历该窗体中的所有控件,取得所有控件的相对位置,并做相应的移动.我现在的问题是,怎么遍历窗体中的所有控件,又怎么移动,有什么好的方法....我想这是一个非常普遍的问题,不过我始终位能解决...最好有C#源码,或C#中的相关实现思路....100分谢谢...

解决方案 »

  1.   

    最好通过设置他们的Dock来解决,要不计算位置什么的太麻烦了
      

  2.   

    遍历可以用foreach(control c in this.controls)移动的好办法等待高手出现...  
      

  3.   

    关键是个人有个人的需求,比如一个button一个textBox, 当窗体Resize时,你是保证其位置的变化还是保证其Size的变化? 如果只是位置变了,textBox可能就很难看了,但是如果控件Size也变化,那么button又不好看了.
      

  4.   

    http://blog.csdn.net/baihe_591/archive/2008/05/30/2495097.aspx
      

  5.   


    foreach(Control c in this.Controls)
    {
    /*
     * do what you want
    c.Location=new Point(0,0);
    c.Width=1;
    c.Height=2;
    */
    }
      

  6.   

    大概思路就是先遍历控件,然后动态设置控件的Location属性
    foreach(control c in this.controls) 
    {
       //TODO  
    }this.ControlID.Location = new System.Drawing.Point(x, y);
      

  7.   

    控件设置Anchor属性:Top, Bottom, Left, Right
    不能解决你的问题吗?
      

  8.   

    设置每个控件的Anchor属性就行了,何必还要计算呢?如果要保证控件大小不变化的同时相对位置比例也不变,把这个控件随便放入一个panel也好其他载体也行,设置其载体的Anchor属性和该控件相对于载体的Anchor属性就可以保证了。
      

  9.   

    直接Point 和 Anchor就可以了吧
      

  10.   

    不行的话。你就把控件放到不同的panel中。在设置Dock属性。当然也可以在窗体中遍历找到控件。在移动控件的位置。但是这个方法实现起来有些困难。在窗体中遍历控件的的代码如下:              foreach (Control c in this.Controls)
                {
                    TextBox t = c as TextBox;
                    if (满足什么条件)
                    {
                        //移动控件。最好把他分块,放到panel中,好控制。
                    }
                }
      

  11.   

    set the "Anchor" value is the best method.
      

  12.   

    我认为最简单的办法是 Dock如果不可以的话,使用遍历,设置控件的top和left的属性。值是 原属性的值 * 窗体变化的百分比