我的系统主窗口中有好多控件,在1024*768时,显示没问题,改为800*600后,有些控件就显示不出来了,手动改变窗口大小时,也会出现这样的情况,在网上没搜到好的解决办法,请高手指点.谢谢!

解决方案 »

  1.   

    private void Form1_Resize(object sender, EventArgs e)
            {        }
    在这个事件里面写一些控制你的控件变化的代码,是不是呢
      

  2.   

    很容易吧
    定义变量如下
    private List<double> dPresentW = new List<double>();
    private List<double> dPresentH = new List<double>();
    private List<double> dPresentT = new List<double>();
    private List<double> dPresentL = new List<double>();
    补充构造函数,例如:
    public Form1()
    {
            InitializeComponent();        foreach (Control ctl in this.Controls)
            {
                    dPresentW.Add((double)ctl.Width / (double)Width);
                    dPresentH.Add((double)ctl.Height / (double)Height);
                    dPresentT.Add((double)ctl.Top / (double)Height);
                    dPresentL.Add((double)ctl.Left / (double)Height);
            }
    }然后写ReSize事件
    private void Form1_Resize(object sender, EventArgs e)
    {
            int iCount = Controls.Count;
            for (int i = 0; i < iCount; i++)
            {
                    Controls[i].Left = (int)(Width * dPresentL[i]);
                    Controls[i].Top = (int)(Height * dPresentT[i]);
                    Controls[i].Width = (int)(Width * dPresentW[i]);
                    Controls[i].Height = (int)(Height * dPresentH[i]);
            }
    }
      

  3.   

    如果改变了Controls,比如增加删除。那就吧这个部分优化以下。包装个类来实现。
      

  4.   

    请问这段代码中的List<double> 是2.0中新增的吗?我现在的版本是1.1,好像不能用.private List<double> dPresentW = new List<double>();
    private List<double> dPresentH = new List<double>();
    private List<double> dPresentT = new List<double>();
    private List<double> dPresentL = new List<double>();
      

  5.   

    to  wuyazhe(牛肉面) 我改为ArrayList后,运行不报错,但是不起作用,以下是我的代码,你帮我看看哪里有问题?谢谢!定义变量如下
    private ArrayList dPresentW = new ArrayList();
    private ArrayList dPresentH = new ArrayList();
    private ArrayList dPresentT = new ArrayList();
    private ArrayList dPresentL = new ArrayList();public Form1()
    {
    InitializeComponent();foreach (Control ctl in this.Controls)
    {
    dPresentW.Add((double)ctl.Width / (double)Width);
    dPresentH.Add((double)ctl.Height / (double)Height);
    dPresentT.Add((double)ctl.Top / (double)Height);
    dPresentL.Add((double)ctl.Left / (double)Height);
    }
    }ReSize事件
    private void Form1_Resize(object sender, EventArgs e)
    {
    int iCount = Controls.Count;
    for (int i = 0; i < iCount; i++)
    {
    Controls[i].Left = (int)(Width * Convert.ToDouble(dPresentW[i]));
    Controls[i].Top = (int)(Height * Convert.ToDouble(dPresentT[i]));
    Controls[i].Width = (int)(Width * Convert.ToDouble(dPresentW[i]));
    Controls[i].Height = (int)(Height * Convert.ToDouble(dPresentH[i]));
    }
    }
      

  6.   

    不好意思,我刚才忘了填加Resize事件了,现在是可以响应,但是把我测试用的所有TextBox都排成一列了.
      

  7.   

    功能实现了,非常感谢 wuyazhe(牛肉面).
      

  8.   

    to wuyazhe
    受教了!非常感谢
      

  9.   

    Controls[i].Left   =   (int)(Width   *   dPresentL[i]); 
    索引超出范围。必须为非负值并小于集合大小。
    参数名: index
    这个是什么原因?