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}
然后您可以简单地使用 ComboBox
的 SelectedIndex
作为该数组的索引。只要两个列表的顺序相同,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
将 return String
值和 Item2
Image
。绑定后,可以通过SelectedValue
属性访问选中的Image
,如
PictureBox1.Image = DirectCast(TypeComboBox.SelectedValue, Image)
如果有人能帮助我,我将不胜感激。提前致谢, 我有一个组合框,其值数据绑定在数据库中,我希望在移动记录时 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}
然后您可以简单地使用 ComboBox
的 SelectedIndex
作为该数组的索引。只要两个列表的顺序相同,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
将 return String
值和 Item2
Image
。绑定后,可以通过SelectedValue
属性访问选中的Image
,如
PictureBox1.Image = DirectCast(TypeComboBox.SelectedValue, Image)