【发布时间】:2016-12-09 07:35:57
【问题描述】:
我有一个带有下拉组合框的用户表单,该下拉组合框在打开表单时填充了项目。如果框有焦点,向上/向下箭头键将在项目之间循环(应该如此),或者用户可以从下拉列表中进行选择,并且仍然可以从那里使用向上/向下箭头。如果用户开始键入,则该框设置为从列表项中追加,但这会禁用向上/向下箭头键循环浏览所有项目。此时,它只会循环浏览以用户键入的任何内容开头的项目。我希望它像在 VBA 版本中一样擦除键入的数据并循环遍历所有组合框项目(从索引开始是附加的任何内容)。
即使用户输入了某些内容,然后从下拉列表中选择了完全不同的项目,下次按下上/下键时,它也只会返回输入的内容。
我尝试在向上/向下键 keydown(或 keyup)事件中处理此问题,如下所示:
Private Sub SeriesBox_KeyDown(sender As Object, e As KeyEventArgs) Handles SeriesBox.KeyDown
Dim CurIndex As Integer = SeriesBox.FindStringExact(SeriesBox.Text)
Select Case e.KeyCode
Case Keys.Down
SeriesBox.Text = String.Empty
SeriesBox.SelectedIndex = CurIndex + 1
Case Keys.Up
SeriesBox.Text = String.Empty
SeriesBox.SelectedIndex = CurIndex - 1
End Select
End Sub
方向键实际上并没有进入这个sub,所以我尝试添加:
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keydata As Keys) As Boolean
If keydata = Keys.Right Or keydata = Keys.Left Or keydata = Keys.Up Or keydata = Keys.Down Then
OnKeyDown(New KeyEventArgs(keydata))
ProcessCmdKey = True
Else
ProcessCmdKey = MyBase.ProcessCmdKey(msg, keydata)
End If
End Function
但这似乎并没有什么不同。有什么我遗漏的吗?
【问题讨论】:
-
不能使用If语句吗?
If combobox_text = "" Then arrowkey_keypress does x, else arrowkey_keypress jumps to first appended value and goes only to appended values我知道这是伪代码,但值得一试,取决于你的VB经验水平
标签: vb.net combobox visual-studio-2015