VB.NET Combobox и картинная коробка - PullRequest
0 голосов
/ 07 октября 2018

Если кто-то может мне помочь, я это ценю.Заранее спасибо, у меня есть выпадающий список со связыванием данных в базе данных, и я хочу, чтобы при перемещении записей на следующую / предыдущую базу на то, какое значение в выпадающем списке является картинкой, отображалась картинка, которую я сохранил в своих ресурсах.

Когда я изменяю значение со списком мыши, изображение меняется, но когда я перемещаюсь между записями, нет.Чего мне там не хватает?

  Private Sub TypeComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TypeComboBox.SelectedIndexChanged

     If TypeComboBox.SelectedItem().ToString() = "1" Then
           PictureBox1.Image = My.Resources.image1
     End if
     If TypeComboBox.SelectedItem().ToString() = "2" Then
             PictureBox1.Image = My.Resources.image2
     End if

      End Sub

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean

    'detect left arrow key
    If keyData = Keys.Left Then
        If Me.ToolsBindingSource.Position = 0 Then
            Me.ToolsBindingSource.MoveLast()
            Return True
        Else
            Me.ToolsBindingSource.MovePrevious()
            Return True
        End If
    End If
    'detect right arrow key
    If keyData = Keys.Right Then
        If Me.ToolsBindingSource.Position = Me.ToolsBindingSource.Count - 1 Then
            Me.ToolsBindingSource.MoveFirst()
            Return True
        Else
            Me.ToolsBindingSource.MoveNext()
            Return True
        End If
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

1 Ответ

0 голосов
/ 07 октября 2018

Я бы посоветовал вам создать массив, содержащий Images в начале.Вам не следует повторно обращаться к одному и тому же свойству My.Resources, поскольку оно будет каждый раз создавать новый объект.Например,

Private images As Image() = {My.Resources.image1, My.Resources.image2}

Вы можете просто использовать SelectedIndex из ComboBox в качестве индекса в этом массиве.Пока два списка находятся в одном и том же порядке, фактические значения в ComboBox не имеют значения.Например,

PictureBox1.Image = images(TypeComboBox.SelectedIndex)

РЕДАКТИРОВАТЬ. Другой вариант - создать список, который связывает Images и текст, связать его с ComboBox и затем использовать SelectedValue, например

Dim imagesAndText = {Tuple.Create("1", My.Resources.image1),
                     Tuple.Create("2", My.Resources.image2)}

With TypeComboBox
    .DisplayMember = "Item1"
    .ValueMember = "Item2"
    .DataSource = imagesAndText
End With

Передав String и Image в Tuple.Create, вы получите Tuple(Of String, Image).Кортежи имеют свойства указанных типов с именами Item1, Item2 и т. Д. В этом случае Item1 вернет значение String и Item2 Image.После привязки вы можете получить доступ к выбранному Image через свойство SelectedValue, например,

PictureBox1.Image = DirectCast(TypeComboBox.SelectedValue, Image)
...