Vb6 在列表框中键入时禁用动态搜索

Vb6 在列表框中键入时禁用动态搜索,vb6,listbox,Vb6,Listbox,在VB6中,如果包含字母数字数据的列表框具有焦点并且按下了字符键,则列表框中以该字符开头的第一个元素将高亮显示。如果按下多个字符,则在每次按下字符后都会选择以每个字符开头的第一个元素。键入M-A-R-T将选择第一个M字,然后选择第一个A字,以此类推 我想做的是编写一个算法,使用多个字符串动态搜索列表框。因此,键入M-A-R-T将突出显示以M-A-R-T开头的第一个元素。“Sorted”属性已经做到了这一点,但我的列表框位于一个包装器中,该包装器使用自定义排序方法,如果启用Sorted,该方法将被

在VB6中,如果包含字母数字数据的列表框具有焦点并且按下了字符键,则列表框中以该字符开头的第一个元素将高亮显示。如果按下多个字符,则在每次按下字符后都会选择以每个字符开头的第一个元素。键入M-A-R-T将选择第一个M字,然后选择第一个A字,以此类推

我想做的是编写一个算法,使用多个字符串动态搜索列表框。因此,键入M-A-R-T将突出显示以M-A-R-T开头的第一个元素。“Sorted”属性已经做到了这一点,但我的列表框位于一个包装器中,该包装器使用自定义排序方法,如果启用Sorted,该方法将被破坏

我已经编写了搜索列表框的所有代码,它工作正常,但默认的搜索行为仍在发生。当我按下M键时,第一个M字会高亮显示。然后我按A键,第一个单词突出显示。当我发布A时,第一个M-A单词会高亮显示。然后我按R键,第一个R字高亮显示。然后我释放R,第一个M-A-R单词被突出显示。所以这个行为就是我想要的,除了在Keydown和Keyup事件之间的某个地方有一个额外的搜索


有没有办法禁用或屏蔽默认的列表框搜索行为?或者锁定滚动条,使系统无法滚动它的方法?

自动滚动是在按键事件后的某个时间发生的。如果表单元素被禁用,它将不会注册任何键事件。因此,我在自己的过滤器后添加了这3行:

    mobjListBox.Enabled = False
    mobjListBox.Enabled = True
    mobjListBox.SetFocus
我猜当第一次按下某个键时,VB6会计算出它将提前调用的所有键事件。如果控件被禁用,VB将重构要调用的关键事件列表。因此,通过禁用控件,我强制VB从工作流中删除其他关键事件(如滚动)。然后我再次启用控件并将焦点返回给它

塔达

尝试添加以下内容:

Private Sub List1_KeyPress(KeyAscii As Integer)
    KeyAscii = 0
End Sub