#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
, и добавить свое собственное выделенное свойство typeInteger
, а затем использовать этот тип вместо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 , вы сможете получить доступ к настроенному вами свойству (я создал тот, который выглядел примерно так, как вы хотели, но я оставлю детали вам) извне класса (поскольку он общедоступен). Если вы создадите его внутри конструктора, вы заметите, что ваши общедоступные свойства отображаются вместе с другими свойствами! Разве это не удивительно?
Кроме того, это свойство объявляется как целое число, вам не придется манипулировать преобразованиями. Я могу ответить на ваши вопросы, если вам нужны дополнительные пояснения.
Получайте удовольствие!