0

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
4

0 に答える 0