Преобразование строки в имя окна изображения - PullRequest
0 голосов
/ 06 августа 2020

Я нажимаю кнопку слайдера изображений и хочу это сделать:

 For i = 1 To 8
     If PBimgprincipal.Image Is ("Picturebox"& i &".jpg").image Then PBimgprincipal.Image = Image.FromFile("picturebox" & i + 1 & ".jpg")
 Next

Я уже пробовал с

If PBimgprincipal.Image Is DirectCast(Controls("PBimg" & i), PictureBox).Image Then PBimgprincipal.Image = Image.FromFile("Figure" & i + 1 & ".jpg")

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Как я уверен, вы узнали, что оператор = не определен для Image. Существует метод .Equals.

If PictureBox1.Image.Equals(Image.FromFile($"Picturebox{i}.jpg")) Then

Я использую интерполированную строку для имени файла.

Это не решит вашу проблему, потому что реализация equals по умолчанию означает 2 объекта указывая на тот же объект в памяти, что не так. Вы можете переопределить функцию Equals, чтобы сравнивать размер и пиксель за пикселем, но, вероятно, есть более простой способ.

Отслеживайте, какое изображение отображается в переменной уровня класса.

Private ImageNumber As Integer

Затем увеличивайте ImageNumber каждый раз, когда пользователь нажимает кнопку NextImage до 8.

Private Sub NextImage_Click(sender As Object, e As EventArgs) Handles NextImage.Click
    If ImageNumber = 8 Then
        ImageNumber = 1
    Else
        ImageNumber += 1
    End If
    PictureBox1.Image = Image.FromFile($"Picturbox{ImageNumber}.jpg")
End Sub

Запуск всего процесса в событии загрузки формы.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    PictureBox1.Image = Image.FromFile("Picturebox1.jpg")
    ImageNumber = 1
End Sub
0 голосов
/ 07 августа 2020

Вы можете найти элемент управления по имени:

Dim matchingControls = Me.Controls.Find("PBimg" & i, true)

If matchingControls.Length > 0 Then DirectCast(matchingControls(0), PictureBox).Image = "blah"

Но я не совсем уверен, что понял вашу точку зрения. Почему бы просто не просканировать папку для изображений, сохранить имена в массиве, а затем переместить ползунок, который позволяет получить имя из массива, загрузить изображение и отобразить его в одном окне с картинками?

...