デフォルトで作成されたフォーム上にボールになるコントロールを配置します。
Labelで十分です。
ツールボックスからLabelをフォームの中央付近に追加します。
名前がLabel1だとあとでわかりにくくなるので、Nameプロパティを「Ball」に変更しておきましょう。
Textプロパティは「●」にします。
AutoSizeプロパティをFalseにして、サイズを固定します。
これで画面上にボールの配置ができました。
次にボールを動かしてみます。
タイマーイベントを使いましょう。
ツールボックスのコンポーネント内にあるTimerをダブルクリックして、Timerを追加します。
フォーム画面の何もないところをダブルクリックして、Form_Loadイベントプロシージャを作成します。
Form_Load内でTimer1を有効化してタイマーイベントが発生するようにします。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Enabled = True
Timer1.Interval = 5
End Sub
次にTimer1をダブルクリックして、タイマーイベントのイベントプロシージャを作成します。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
End Sub
この中でボールを動かします。
ボールの動く速度を決めないといけませんが、これはフォーム内の変数として定義します。ついでにボールのxy座標を示す変数も定義しておきます。そしてForm_Load内で初期化します。
Dim x, y, dx, dy As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Enabled = True
Timer1.Interval = 5
dx = 2
dy = 2
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
x = x + dx
y = y + dy
Ball.Left = x
Ball.Top = y
End Sub
これでボールが動くようになりましたが、画面の外に消えて行ってしまいます。
壁に当たったら跳ね返るようにします。
画面左側は0でいいのですが、右側で跳ね返るようにするために、フォーム自身を表す「Me」を使用して画面の幅「Me.Width」を使ってみます。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If x + dx <= 0 Or x + Ball.Width + dx > Me.Width Then
dx = -dx
End If
If y + dy <= 0 Or y + Ball.Height + dy > Me.Height Then
dy = -dy
End If
x = x + dx
y = y + dy
Ball.Left = x
Ball.Top = y
End Sub
すると、画面の右側より少し先で跳ね返っているようです。
これは、フォーム画面に枠があり、それはフォームのサイズより小さいからです。そのサイズを保持しているのがClientSizeという変数です。
MeではなくClientSizeを使ってみましょう。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If x + dx <= 0 Or x + Ball.Width + dx > ClientSize.Width Then
dx = -dx
End If
If y + dy <= 0 Or y + Ball.Height + dy > ClientSize.Height Then
dy = -dy
End If
x = x + dx
y = y + dy
Ball.Left = x
Ball.Top = y
End Sub
これで画面の上下左右でボールが跳ね返るようになりました。