分享

Visual Basic2自适应窗体设计经验-开发频道-VB-天极网

 昵称728549 2010-02-20

  所以根据上面介绍的原理,在窗体被缩放之后,只要按照下面的关系来设置控件的Left和Top属性值即可。

调整后控件的Left属性值=(控件原Left属性值/窗体原Left属性值)*窗体.ScaleWidth;
调整后控件的Top属性值=(控件原Top属性值/窗体原Top属性值)*窗体.ScaleHeight;

  3、实现按窗体缩放比例调整控件大小及位置的具体方法

  我们知道,Resize事件是窗体响应的一个事件。当窗体第一次显示或当窗体的状态被改变时(如窗体被最大化、最小化或被还原时)该事件发生。所以只要将对控件大小、位置的调整代码写入窗体的Resize事件中便可达到目的。具体可在窗体的Resize事件过程中使用对象的Move方法:

Private Sub Form_Resize()
 Object.move Newleft, Newtop, NewWidth, NewHeight
End Sub

  其中:

  Object是需要调整大小和位置的任意一个控件的名称;

  NewLeft, NewTop, NewWidth与NewHeight分别是窗体缩放后控件应有的新的Left, Top,Width与Height的属性值,它们确定了当窗体被缩放后控件的大小和位置。NewWidth, NewHeight的值可由1中的两个公式得到:NewLeft, NewTop的值可由2中的两个公式得到。

  4、窗体的多控件的处理

  当一个窗体中有多个控件时,如果对每一个控件都用上述方法处理显然比较繁琐。为此,以下给出一个通过编程来处理窗体内多个控件的一般方法(注意:如果窗体内有不可见的控件,则应该在程序中加入相应的代码以避免检查这些控件的尺寸,否则将出错)。

  (1)自定义一个数据类型

  在标准模块的声明段写入:

Type cp
 wp As Single
 hp As Single
 tp As Single
 lp As Single
End Type

  (2)定义一个窗体级数组

  在窗体模块的声明段写入:

Dim ap() As cp

  (3)定义一个通用过程

Sub ai()
 Dim i As Integer
 For i=0 To Controls.Count-1
  With ap(i)
   .wp=Controls(i).Width/Form1.ScaleWidth
   .hp=Controls(i).Height/Form1.ScaeHeight
   .lp=Controls(i).Left/Form1.DcaleWidth
   .tp=COntrols(i),Top/Form1.ScaleHeight
  End With
 Next i
End Sub

  (4)在窗体的Load事件过程中写入代码:

Private Sub Form_Load()
 ReDim ap (0 To Controls.Count-1)
 ai
End Sub

  (5)在窗体的Resize事件过程中写入代码:

Private Sub Form_Resize()
 Dim i As Integer
For i=0 To Controls.Count-1

  以下三行需在一行内写完

 Controls(i).Move ap(i).1p * Form1.ScaleWidth,
 ap(i).tp * Form1.ScaleHeight,ap(i).WP*Form1.ScaleWidth,
 ap(i).hp * Form1.ScaleHeight
 Next i
End Sub

  不难看出,上面的代码具有普遍意义:即对于任何VB程序,只要将上面给出的代码按照要求写入程序中,则无论该VB程序的一个窗体中具有多少控件,均能使窗体内的控件自适应于窗体尺寸缩放,从而解决了控件与窗体在尺寸和位置两方面的比例失调问题。

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多