我在窗体内放置好控件后,运行
最大化以后,控件就显得有些乱了 
怎么能让控件在窗体改变后,还能显得有条理!!
谢谢!

解决方案 »

  1.   

    加入Form_Resize事件 :)Private Sub Form_Resize()   If Me.WindowState = 2 Then ''这里2表示最大化      /*在这里加入重新设置控件位置的代码*/   End IfEnd Sub
      

  2.   

    注意:
    计算坐标的时候应该使用容器的ScaleWidth、ScaleHeight属性
    Width、Height属性是算上窗口外框的大小,对于Form只能是Twip
    ScaleWidth、ScaleHeight属性是客户区(能摆放控件的区域,不包括标题栏、菜单栏、边框、滚动条等)的大小
    为什么要在ReSzie事件中改变大小
    这是为了能让用户可以在运行时改变窗口大小
    而“运行时改变窗口大小”的功能是窗口的基本功能
    如果你的程序无法做到这一点
    就给人一种不专业的感觉(至少我将绝不用那样的软件)
    所以一定要锻炼在ReSzie事件中调整控件坐标的能力
    对于控件之间有间隙
    可以先定义一个常数来说明控件之间的标准间隙大小
    然后在计算控件坐标的时候也算上该常数
    只是数学运算稍微麻烦了一点而已其实一般的界面都是分成几块的
    如资源管理器分为上面的工具栏区域(ReBar控制项)和下面的TreeView、ListView区域
    它在处理ReSzie事件时只需修改ReBar控制项的宽度以及下面的TreeView、ListView控制项的位置
    由于ReBar控制项会自动修改其中的工具栏的位置,于是程序员不需要操心从上面那个例子可看出
    由于一般的界面都是分成几块区域的
    只有区域本身需要修改位置
    区域中的控件大多不需要修改位置
    所以其实在窗口中真正需要手动算坐标的其实很少可以在VB中利用这种思想
    可将控件放入不同的PictureBox中
    特别是PictureBox有Align属性
    可以进一步的减少代码量假若PictureBox中的控件需要定位
    则应在PictureBox的ReSize事件中定位控件(注意此时别在Form的ReSize事件定位,那是人为制造难度)
    区域大小也应根据PictureBox的ScaleHeight、ScaleWidth属性
    此时With语句的作用就很重要了(如在“With PicLeft”块中写定位代码)
    注意这时为了减少PictureBox所占资源
    应将其AutoRedraw、HasDC属性都设为False
      

  3.   

    佩服zyl910!
    同时感谢你的回复 :)