使用 Visual Basic,在运行时移动控件是最容易取得的效果之一。可以直接改变控件位置定义的属性,也可使用 Move 方法。
Left 属性是控件左上角到窗体左边的距离。Top 属性是控件左上角到窗体上边的距离。图 12.10 显示控件的 Left 和 Top 属性。
图 12.10 Left 和 Top 属性
通过改变 Left 和 Top 属性的设置值移动控件,可使用以下语句:
txtField1.Left = txtField1.Left + 200
txtField1.Top = txtField1.Top – 300
如前面提到的,直线控件没有 Left 和 Top 属性。但是,可使用特殊的属性,对窗体上直线控件的位置进行控制。下表列出这些属性,以及用它们怎样决定直线控件的位置。
属性 | 描述 |
X1 | 直线起点的 x 坐标。该坐标用当前刻度单位给出。直线的起点是开始画之前创建的端点。 |
Y1 | 直线起点的 y 坐标。 |
X2 | 直线终点的 x 坐标。直线终点是停止画时最后创建的端点。 |
Y2 | 直线终点的 y 坐标。 |
Blanker 应用程序的跳跃直线演示程序,使用以下语句随机地改变 DemoForm 上直线控件的位置:
'
为第一个直线端点,设置随机的X
位置值。linLineCtl.X1 = Int(DemoForm.Width * Rnd)
'
为第一个直线端点,设置随机的Y
位置值。linLineCtl.Y1 = Int(DemoForm.Height * Rnd)
'
为第二个直线端点,设置随机的X
位置值。linLineCtl.X2 = Int(DemoForm.Width * Rnd)
'
为第二个直线端点,设置随机的Y
位置值。linLineCtl.Y2 = Int(DemoForm.Height * Rnd)
'
清除移动直线遗留像素。Cls
'
在下次移动之前使显示暂停。Delay
改变 Left 和 Top 或 X 和 Y 属性,会使控件产生先水平移动然后再垂直移动的颠簸效果。Move 方法则能产生更平滑的对角线方向的移动。
Move 方法的语法如下:
[object.]Move left [, top[, width[, height] ] ]
object 是被移动的窗体或控件。如果省略了 object,则移动的是当前窗体。left 和 top 参数是 object 对象的 Left 和 Top 属性的新设置值,而 width 和 height 则是它的 Width 和 Height 属性的新设置值。其中,只有 left 是必须的,但是,若要指定其它参数时,就必须一并指定参数列表中出现在指定参数之前的所有参数。
当对象在其容器中移动到指定坐标处时,就是绝对移动。下述语句是用绝对移动,将名为 txtField1 的控件,移动到坐标(100,200)处:
txtField1.Move 100, 200
通过指定从当前位置应当移动的距离,使控件移动时,就是相对移动。下述语句是使用相对移动,将 txtField1 移动到它当前位置向右和向下 100 缇处:
txtField1.Move txtField1.Left + 100, txtField1.Top _
+ 100
本节显示 Blanker 示例应用程序中控件的移动。回弹演示程序,可使图片框沿着窗体对角线移动,所以图片框看起来象是从窗体边“反弹”回来一样。因为图象控件移动时重画引起抖动,所以该演示程序使用图片框而不用图象控件。
图 12.11 显示了 Blanker 应用程序 (DemoForm) 的主窗体和此例中用到的图片框。
图 12.11 Blanker 应用程序中的图片框 (picBall)
图片框的名称是 picBall。当从“选项”菜单中选定“Rebound”命令,然后单击“Start Demo”按钮后,该控件就开始沿着窗体移动。这个命令按钮的事件过程再调用 CtlMoveDemo 过程。
CtlMoveDemo 过程随机地从以下四个可能中选定一个开始方向:
picBall 图片框一直沿着选定方向移动,直到控件到达窗体四个边缘中的一个为止。然后图片框从它到达的边缘处改变方向;方向由变量 Motion
控制。例如, 当图片框正在向左上方移动时,该过程的这一部分,将改变 Motion
的值,以指挥代码让 picBall 向另一个方向移动。
下述语句来自于 Blanker 应用程序中的 CtlMoveDemo 过程:
Select Case Motion Case 1 '
若是向左上方运动,则使控件移动
' 20
缇。picBall.Move picBall.Left - 20, picBall.Top - 20
'
若控件接触左边缘,则改变运动'
向右下方。If picBall.Left <= 0 Then
Motion = 2
'
若控件接触上边缘,则改变运动'
向左下方。ElseIf picBall.Top <= 0 Then
Motion = 4
End If
应注意的是,使 picBall 移动的代码行,从它的 Left 和 Top 属性的当前值减 20 缇,以便建立控件的新位置。这可保证控件一直相对其当前位置移动。
控件移动的速度和光滑度,决定于 Move 方法中的缇(或其它单位)数。增加缇数,可提高移动的速度,却要降低移动的光滑度。降低缇数,要降低移动的速度,却可提高控件移动的光滑度。
详细信息 关于 Move 方法的补充内容,请参阅《语言参考》的“Move 方法”。