So basically, i have 2 int variables, x and y i am using to create a grid of pictureboxes.
This is all fluid and built on runtime.
I am trying to specifically change the picturebox on click if mine = 2.
I cannot specifically change one, when i click any, it changes all of them.
HELP PLEASE!!
Heres my code:
Public Class Form1
Inherits System.Windows.Forms.Form
Dim images(8) As Image 'declares image array
Dim zonesY As Integer = 50
Dim zonesX As Integer = 50
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("blank.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("clear.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
Dim mine As Integer
pbxNewZone = New PictureBox
Dim blockStatus As Integer
Dim allZones As Integer
allZones = zonesX * zonesY
blockStatus = generator.Next(0, allZones)
pbxNewZone.Name = (zonesX * (y - 1)) + x
If blockStatus < (allZones / 10) Then
mine = 1
If mine = 1 Then
pbxNewZone.Image = images(8)
End If
Else
mine = 2
If mine = 2 Then
pbxNewZone.Image = images(0)
End If
End If
pbxNewZone.Height = 16
pbxNewZone.Width = 16
pbxNewZone.Tag = 0
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
checkBlank()
End Sub
Public Sub checkBlank()
End Sub
Private Sub pbxNewZoneClicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
ReDim x
Do While y = 1 'starts a For loop (1 to zonesY number of loops)
Do While x = 1 'starts a For loop (1 to zonesX number of loops)
MsgBox("you have clicked " & x & ", " & y)
Loop
Loop
End Sub
End Class
In a Click event, sender
will be the clicked object so...
Dim pbx as PictureBox = DirectCast(sender,PictureBox)
...will give you a reference (as pbx
) to the clicked PictureBox - then you can do what you need to do with it.
For ease, you may want to check the state of a given PictureBox by checking pbx.Image
- as you do not have any custom attributes of the PictureBox.