私はMinesweeperを作り直しています。私のすべてのコードは実行時に作成され、トラブルシューティングに役立つようにC & pにお気軽に。VB.NET .Name = varの絵文字に文を書く方法
ランダムな鉱山でピクチャボックスのグリッド(pbxNewZone)を作成するループがあり、そのボックスが地雷の場合はタグをtrueに設定し、そうでない場合はfalseに設定します。
「pbxNewZoneClicked」というクリックイベントのピクチャボックス(現在は「pb」と呼ばれています)をダイレクトキャストし、そのタグを読み取ります。現在、テスト目的の鉱山を示しています。タグの状態に応じてピクチャボックスをクリックすると、ヒットした鉱山が表示され、imgがクリアされます。
今、私は画像をクリックして鉱山のためにその周りの8つの画像を確認する必要があります。すべての鉱山は、グリッド上のx &のy座標(文字通り、form_loadに作成されたInteger xとyに基づいています)によって命名され、1ベースです。つまり、最初の地雷は "0、0"ではなく "1,1"となります。
したがって、「8,7」という名前のpb(名前を変更したダイレクトキャストされたピクチャボックス)をクリックすると、xValueCheckおよびyValueCheck変数をそれぞれ「8」および「7」としてサブリングします。私は1つずつ減算し(ボックスを左上に)、Dim Box1 As Stringとします。この場合、「7,6」となります。
ここに私が持っている論理があります。
クリックしないと、クリックイベント内のpbのタグを確認するにはどうすればよいですか?ここで
は、私がこれまでに得たものです:
Public Class Form1
Inherits System.Windows.Forms.Form
Dim active As Boolean = True
Dim images(8) As Image 'declares image array
Dim zonesY As Integer = 9
Dim zonesX As Integer = 9
Dim Guy As Object
Dim pbxNewZone As PictureBox = DirectCast(Guy, PictureBox) 'declares pbxNewZone as a picturebox variable
Dim generator As New Random
Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
images(0) = Image.FromFile("clear.png")
images(1) = Image.FromFile("1.png")
images(2) = Image.FromFile("2.png")
images(3) = Image.FromFile("3.png")
images(4) = Image.FromFile("4.png")
images(5) = Image.FromFile("5.png")
images(6) = Image.FromFile("blank.png")
images(7) = Image.FromFile("hit.png")
images(8) = Image.FromFile("mine.png")
Dim x As Integer 'declares x as an integer variable
Dim y As Integer 'declares y as an integer variable
Me.SuspendLayout() 'suspends creation of layout
For y = 1 To zonesY 'starts a For loop (1 to zonesY number of loops)
For x = 1 To zonesX 'starts a For loop (1 to zonesX number of loops)
Dim zonesize1 As Integer
Dim zonesize2 As Integer
pbxNewZone = New PictureBox
Dim blockStatus As Integer
Dim allZones As Integer
allZones = zonesX * zonesY
blockStatus = generator.Next(0, allZones)
pbxNewZone.Name = y & ", " & x
If blockStatus < (allZones/5) Then
pbxNewZone.Tag = True
If pbxNewZone.Tag = True Then
pbxNewZone.Image = images(8)
End If
Else
pbxNewZone.Tag = False
If pbxNewZone.Tag = False Then
pbxNewZone.Image = images(6)
End If
End If
pbxNewZone.Height = 16
pbxNewZone.Width = 16
zonesize1 = pbxNewZone.Height 'sets out all of the boxes on the form.
zonesize2 = pbxNewZone.Width
pbxNewZone.Left = ((x - 1) * zonesize1 + 15)
pbxNewZone.Top = ((y - 1) * zonesize2 + 15)
Me.Controls.Add(pbxNewZone)
' Wire this control up to an appropriate event handler
AddHandler pbxNewZone.Click, AddressOf pbxNewZoneClicked
Next
Next
Me.Height = (pbxNewZone.Height * zonesY + 63) 'sets the height of fmmGame
Me.Width = (pbxNewZone.Width * zonesX + 40) 'sets the width of frmGame
End Sub
Private Sub pbxNewZoneClicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
If active = True Then
Dim pb As PictureBox = DirectCast(sender, PictureBox)
Dim Status As String = "Clear" ' Status - Testing Purposes Only
If pb.Tag = True Then ' Status - Testing Purposes Only
Status = "Mine" ' Status - Testing Purposes Only
End If
MsgBox(pb.Name & vbCrLf & "Status: " & Status, , "Test") ' Post Statistics of box.
Dim xValueCheck As Integer = pb.Name.Substring(0, 1)
MsgBox(xValueCheck) ' To spit out y value from name
Dim yValueCheck As Integer = pb.Name.Substring(3, 1)
MsgBox(yValueCheck) ' To spit out y value from name
Dim Box1 As String = (xValueCheck - 1) & ", " & (yValueCheck - 1)
MsgBox("Box1 = " & Box1, , "Test")
Dim count As Integer = 0
If pb.Tag = True Then
pb.Image = images(7) ' Hit Image
active = False
MsgBox("No Longer Active", , "Test") ' Testing Purposes Only
ElseIf pb.Tag = False Then
'ENTER CODE THAT WILL READ BOXES AROUND IT
'ENTER CODE THAT WILL READ BOXES AROUND IT
'ENTER CODE THAT WILL READ BOXES AROUND IT
'ENTER CODE THAT WILL READ BOXES AROUND IT
'ENTER CODE THAT WILL READ BOXES AROUND IT
pb.Image = images(count) ' Clear Image by default.
End If
End If
End Sub
End Class
ユーザーコントロールを使用するために既存のコードを変更するにはどうすればよいですか? –