Сапер VB.NET выпуск - PullRequest
       19

Сапер VB.NET выпуск

0 голосов
/ 17 октября 2011

В общем, у меня есть 2 переменные типа int, x и yi, которые я использую для создания сетки ящиков с картинками.

Это все текуче и построено во время выполнения.

Я пытаюсь специальнопоменяйте картинку на клик, если моя = 2.

Я не могу специально изменить одну, когда я нажимаю любую, она меняет их все.

ПОМОГИТЕ ПОЖАЛУЙСТА !!

Вотмой код:

  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

Ответы [ 2 ]

4 голосов
/ 17 октября 2011

Вы добавляете один и тот же обработчик для всех PictureBox, но ничего не делаете для конкретного PictureBox, по которому щелкнули (параметр Sender). Вы можете использовать свойства имени или тега, чтобы понять, что делать с кликом. Возможно, вы захотите расширить стандартный PictureBox, добавив в него дополнительные параметры, например, свойства x и y.

Кроме того, вы можете подумать о перефакторинге form_load, чтобы он вызывал ряд более дискретных методов.

1 голос
/ 17 октября 2011

В событии Click, sender будет выбранным объектом, поэтому ...

Dim pbx as PictureBox = DirectCast(sender,PictureBox)

... даст вам ссылку (как pbx) на нажатие PictureBox - тогда вы сможете делать с ним все, что вам нужно.

Для простоты вы можете проверить состояние данного PictureBox, установив pbx.Image - поскольку у вас нет пользовательских атрибутов PictureBox.

...