【Visual Basic】计时器与窗体屏幕尺寸的取法

主要是利用一个小例子讲解VB中计时器Timer的运用。

如下图所示:


有一个显示当前时间,在屏幕的边缘不停地移动。

首先是窗体设置,直接从工具箱拖入Label与Timer控件。Timer控件是没有长度的,属于脚本类型的控件,只能双击写代码。

各个空间的尺寸、文本等就不设置了,直接双击窗体,在窗体初始化下的过程,用代码控制。


在代码界面输入以下的代码:

Public Class Form1

    Public Flag As Integer '全局变量Flag的定义

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '窗体载入马上执行的事件
        Me.Width = 300
        Me.Height = 300
        Label1.Top = 0
        Label1.Left = 0
        Label1.Text = Now
        Timer1.Interval = 1000 'Timer1每1000毫秒,就是1秒,执行Timer1_Tick这个函数
        Timer1.Enabled = True
        Timer2.Interval = 80 'Timer2每80毫秒,执行Timer2这个函数
        Timer2.Enabled = True
        Flag = 0
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick '此过程在双击控件会自动生成,无须自己输入
        Label1.Text = Now 'vb.net只能用Now取当前的时间,Time$是不行
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        If Flag = 0 Then
            If Label1.Left + 20 > Width - Label1.Width Then
                Flag = 1
            Else
                Label1.Left += 20
            End If

        ElseIf Flag = 1 Then
            If Label1.Top + 20 > DisplayRectangle.Height - Label1.Height Then ' DisplayRectangle.Height是vb.net的写法,在vb6写成Scaleheight
                Flag = 2
            Else
                Label1.Top += 20
            End If

        ElseIf Flag = 2 Then
            If Label1.Left - 20 < 0 Then
                Flag = 3
            Else
                Label1.Left -= 20
            End If

        ElseIf Flag = 3 Then
            If Label1.Top - 20 < 0 Then
                Flag = 0
            Else
                Label1.Top -= 20
            End If

        End If
    End Sub
End Class

程序的思想与《【ActionScript】组件的颜色变换》( 点击打开链接)是一模一样的。只是这里是控件在四个边角的移动。

一进入程序,首先进入Private Sub Form1_Load这个过程,设置好各个控件。

之后,每1秒用当前时间刷新Label1的文本内容。每80毫秒刷新Label的位置。Top与Left属性分别构成Label的横纵坐标。还要判断,Label是否到底控件的边缘。

这里的高度不可以用Height,这个高度不包含标题栏的高度。DisplayRectangle.Height是vb.net的写法,在vb6写成Scaleheight,可以取出窗体含标题的高度。

这样判断才可能使得Label1的位置不超出窗体的边缘。

同时,Flag必须定义为一个全局变量,初始为0,否则,如果在Private Sub Timer2_Tick中定义,会出现每次Flag都0的错误了。因为读一次Private Sub Timer2_Tick就重新定义Flag为0,因此Flag定义必须放在此过程之外,成为全局变量。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值