vb.net - 改变 ListBox 的打字行为
问题描述
当在列表框中键入内容时,列表框会滚动到第一个字母与输入字符匹配的下一个项目。我想禁用/更改此行为。
我为按键事件实现了一个处理程序并实现了我的新行为,但我没有看到任何删除旧行为的方法。
如何禁用默认行为?
这是按键事件的事件处理程序:
Private Sub FooListBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles FooListBox.KeyPress
If SearchResetTimer.Enabled Then
SearchResetTimer.Stop()
SearchTimer.Stop()
Else
BeginUpdate()
SearchedString = ""
End If
SearchedString = SearchedString & e.KeyChar
SearchResetTimer.Start()
SearchTimer.Start()
End Sub
Private Function SearchFor(listbox As ListBox, target As String) As Integer
For i As Integer = listbox.SelectedIndex To listbox.Items.Count - 1
If listbox.Items(i).ToString().ToLower().StartsWith(target) Then
Return i
End If
Next
For i As Integer = 0 To listbox.SelectedIndex - 1
If listbox.Items(i).ToString().ToLower().StartsWith(target) Then
Return i
End If
Next
Return -1
End Function
Private Sub SearchTimer_Tick(sender As Object, e As EventArgs) Handles SearchTimer.Tick
SearchTimer.Stop()
Dim Found As Integer = SearchFor(FooListBox, SearchedString)
If Found <> -1 Then
FooListBox.SelectedIndex = Found
End If
EndUpdate()
End Sub
Private Sub SearchResetTimer_Tick(sender As Object, e As EventArgs) Handles SearchResetTimer.Tick
SearchResetTimer.Stop()
End Sub
快速概述:有两个计时器,searchTimer 勾选后搜索字符串并更新控件,searchResetTimer 重置搜索的字符串并标记新用户输入的开始。
请注意,我不会在 CC 下发布此代码,仅用于说明目的
解决方案
推荐阅读
- date - 如何使用 MapStruct 将日期字符串转换为另一种格式?
- python - matplotlib 中的多尺度子图
- javascript - 使用其他组件中的按钮显示对话框
- php - 如何创建静态函数create table php?
- javascript - ExtJS:同步 ComboBox 和 TagField
- c++ - sdl_net 应用程序无法正确启动 (0xc000007b)
- javascript - 更新图形Javascript时处理图像的最佳方法
- c++ - 你能在 OpenGL 中获得纹理的分配内存吗?
- html - 如何将使用 innerHTML 注入的样式包含到 DOM 元素及其子元素中?
- java - 是什么导致 ConcurrentModificationException