Сохранение целочисленного значения в pictureboxes

#vb.net

#vb.net

Вопрос:

Эй, итак, я пытаюсь закодировать свои изображения так, чтобы все они хранили уникальное целое число, которое я затем буду использовать в другом месте, но сейчас я действительно изо всех сил пытаюсь просто сохранить для них значение. Вот мой код для создания изображения, как мне выделить число для каждого изображения, где первое изображение содержит 1, второе 2 и так далее… Итак, чтобы проверить, например, когда я нажимаю на картинку, отображается их количество.

 Private Sub bigpictureloader()
        Dim cardcount As Integer
        Dim cards As List(Of String) = New List(Of String)
        cards.Add(imageurltxt.Text)

        'Create a placeholder variable
        Dim cardPictureBox As PictureBox

        'Loop through every selected card URL
        For Each url As String In cards
            'Create a new PictureBox
             cardPictureBox = New PictureBox()
            cardPictureBox.Size = New Size(100, 100)
            cardPictureBox.SizeMode = PictureBoxSizeMode.Zoom
            cardPictureBox.WaitOnLoad = False
            AddHandler cardPictureBox.Click, AddressOf imagehandler
            cardcount = 0


            count  = 1
            cardcount = count
            cardPictureBox.Tag = cardcount.ToString
            MsgBox(cardPictureBox.Tag)

            'Add the PictureBox to the Form
            Me.Controls.Add(cardPictureBox)

            If imageurltxt.Text = "" Then
                cardPictureBox = Nothing
            Else

                cardPictureBox.LoadAsync(url)
                TableLayoutPanel1.Controls.Add(cardPictureBox, 0, 0)
                cardcount = 0
' this is what I tried but I can't get the image to store the cardcount
                count  = 1
                cardcount = count
                MsgBox(cardcount)
            End If
            'Load the image asynchronously
            ' cardPictureBox.LoadAsync(url)
            'TableLayoutPanel1.Controls.Add(cardPictureBox, 0, 0)
        Next

    End Sub
  

Это код для события нажатия на картинку, как мне перенести cardcount?

 'Can't seem to transfer the cardcount to here
' tried cardpicturebox instead of sender but it still doesn't transfer cardcount
 Private Sub imagehandler(Sender As Object, e As EventArgs)
        bigpictureloader()
        testdelete()


    End Sub
  

Комментарии:

1. Вы можете присвоить номер Tag каждому PictureBox из них. Вы даже можете создать свой собственный класс, который наследует PictureBox , и добавить свое собственное выделенное свойство type Integer , а затем использовать этот тип вместо PictureBox . В качестве альтернативы, просто добавьте PictureBoxes в массив и используйте индексы в качестве чисел.

2. что проще всего?

3. подождите, я помещаю это в bigpictureloader() count = 1 cardcount = count cardPictureBox.Tag = cardcount . toString MsgBox(cardPictureBox. Тег) как мой обработчик изображений может распознать cardcount?

4. Пожалуйста, не публикуйте длинные фрагменты кода в комментариях, особенно неформатированные. Они почти нечитаемы. Если вам нужно опубликовать дополнительный код, обновите свой вопрос. Тем не менее, sender параметром в ЛЮБОМ обработчике событий является объект, который вызвал событие, поэтому вы получаете доступ PictureBox к тому, который был нажат таким образом, а затем получаете его Tag значение свойства.

5. Тогда вы сделали это неправильно. Если мы не сможем увидеть, что вы сделали, мы не сможем сказать вам, что с этим не так. Сделайте, как я сказал, и обновите свой вопрос новым кодом.

Ответ №1:

Этот ответ предназначен только для того, чтобы помочь вам с комментариями jmcihinney. Если это поможет, пожалуйста, поддержите его комментарии, поскольку они являются разумным советом.

Вот фрагмент кода, который создает пользовательский класс, наследующий от класса PictureBox . Короче говоря, это PictureBox с некоторыми дополнительными функциями:

 Class Cards
    Inherits PictureBox

    'This holds the 'Card number' value
    Private _number As Integer

    'This makes the CardNumber Property Public. You can access it from outside, and in the designer
    Public Property CardNumber As Integer
        Get
            Return _number
        End Get
        Set(value As Integer)
            _number = value
        End Set
    End Property

    'This is a fake function just to show that you could add custom functions here
    Public Sub FakeSub()
        MessageBox.Show("My card number is: " amp; _number.ToString)
    End Sub
End Class
  

Используя этот класс вместо PictureBox , вы сможете получить доступ к настроенному вами свойству (я создал тот, который выглядел примерно так, как вы хотели, но я оставлю детали вам) извне класса (поскольку он общедоступен). Если вы создадите его внутри конструктора, вы заметите, что ваши общедоступные свойства отображаются вместе с другими свойствами! Разве это не удивительно?

Кроме того, это свойство объявляется как целое число, вам не придется манипулировать преобразованиями. Я могу ответить на ваши вопросы, если вам нужны дополнительные пояснения.

Получайте удовольствие!