Visual Studio 2012 でサポートされていないフォントをインポートしました。コードは機能していますが、ラベルの境界と移動するピクチャ ボックスの境界が接触すると問題が発生し、ラベルにエラーが発生します (できないため、リンクを参照してください)。投稿画像はまだです)。
http://img196.imageshack.us/img196/4562/ybzy.jpg
このエラーは、2 つのオブジェクトが Me.Close() を使用して閉じられ、Form.Show() によって再度開かれたフォームが、2 つのオブジェクトが互いの境界に接触したときに発生します。なぜフォームを閉じて再度開く必要があるのか 疑問に思っている人のために、単純なゲームの次のレベルでそれが必要です.
注: 最初のフォームを閉じる前に、そのフォーム内に多くのコードがある別のフォームを開き、そのフォームを閉じる前に、最初のフォームをもう一度開きます。
注: invaders.TTF は私の Debug フォルダーにあります。
モジュールのコード:
Imports System.Drawing.Text
Module Module1
Public shoLevel As Short = 1
Public Function custFont(data As String, ByVal size As Single, ByVal style As FontStyle) As Font
Dim customFfont As Font
Dim pfc = New PrivateFontCollection()
pfc.AddFontFile(Application.StartupPath & data)
customFont = New Font(pfc.Families(0), size, FontStyle.Regular)
Return customFont
End Function
End Module
ラベルと動画ボックスを持つ最初のフォーム (レベルを表示) のコード。
注: ピクチャ ボックスの他の方向を制御する他のタイマーは表示しませんでした。まっすぐ上に移動すると、ピクチャボックスがラベルに当たると仮定しましょう。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Font = custFont("\invaders.TTF", 20, FontStyle.Regular)
Label1.Text = "L E V E L " & shoLevel
Label1.Location = New Point((Me.Width - lblLevel.Width) / 2, (Me.Height - lblLevel.Height) / 2)
timer1.Start()
End Sub
Private Sub timer1_Tick(sender As Object, e As EventArgs) Handles timer1.Tick
Static x as integer = 0
picturebox1.Top -= 2
x+=1
If x >= 100 Then
timer1.Stop()
Form2.Show()
Me.Close()
End If
End Sub
End Class
ラベルと動く画像ボックスを持つ 2 番目のフォーム (メイン ゲーム) のコード。
注:ここでもエラーが発生します。
Public Class Form2
Dim blnNextLevel as Boolean = False
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Font = custFont("\invaders.TTF", 20, FontStyle.Regular)
Label1.Text = "L E V E L " & shoLevel
'*insert lines of codes here*'
timer1.Start()
End Sub
'*timer that has a validation if it is ready for the next level*'
Private Sub timer1_Tick(sender As Object, e As EventArgs) Handles timer1.Tick
'*insert lines of codes here*'
'*Assuming that the blnNextLevel is now True*'
If blnNextLevel = True Then
shoLevel += 1
Form1.Show()
Me.Close()
End IF
End Sub
'*Insert codes for other objects like timers for the moving pictureboxes*'
End Class