VB.NET 组合框和图片框

VB.NET Combobox and picture box

如果有人能帮助我,我将不胜感激。提前致谢, 我有一个组合框,其值数据绑定在数据库中,我希望在移动记录时 next/previous 基于什么组合框值是一个图片框,显示我存储在我的资源中的图片。

当我用鼠标组合框值改变时,图片会改变,但当我在记录之间移动时,图片不会改变。我在那里错过了什么?

  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

我建议您创建一个在开头包含 Images 的数组。您不应重复访问 My.Resources 的相同 属性,因为它每次都会创建一个新对象。例如

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

然后您可以简单地使用 ComboBoxSelectedIndex 作为该数组的索引。只要两个列表的顺序相同,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

通过将 StringImage 传递给 Tuple.Create,您将得到 Tuple(Of String, Image)。元组具有指定类型的属性并命名为 Item1Item2 等。在这种情况下,Item1 将 return String 值和 Item2 Image。绑定后,可以通过SelectedValue属性访问选中的Image,如

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