首页 > 解决方案 > 改变 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 下发布此代码,仅用于说明目的

标签: vb.netwinformslistbox

解决方案


推荐阅读