在VB6中,如果包含字母数字数据的列表框具有焦点并且按下了字符键,则列表框中以该字符开头的第一个元素将突出显示。如果按下多个字符,则在每次按下字符后,将选择以每个字符开头的第一个元素。键入M-A-R-T将选择第一个M字,然后选择第一个A字,依此类推。
我想要做的是编写一个算法,使用多个字符串动态搜索列表框。因此,键入M-A-R-T将突出显示以M-A-R-T开头的第一个元素。" Sorted“属性已经做到了这一点,但是我的列表框在一个包装器中,该包装器使用一个自定义的排序方法,如果打开Sorted,这个方法就会被破坏。
我已经编写了搜索列表框的所有代码,它可以正常工作,只是默认的搜索行为仍在发生。当我按M键时,第一个M字被高亮显示。然后我按下A,第一个A单词被高亮显示。当我释放A时,第一个M-A单词被突出显示。然后我按R键,第一个R字突出显示。然后我松开R,第一个M-A-R单词被突出显示。所以行为就是我想要的,除了在Keydown和Keyup事件之间的某个地方进行了额外的搜索。
有没有办法禁用或屏蔽默认的列表框搜索行为?或者是锁定滚动条使系统无法滚动的方法?
发布于 2009-09-30 09:55:46
自动滚动发生在KeyDown事件之后的某个时间。如果表单元素被禁用,它将不会注册任何键事件。所以我在我自己的过滤器后添加了这3行:
mobjListBox.Enabled = False
mobjListBox.Enabled = True
mobjListBox.SetFocus
我猜当一个键第一次被按下时,VB6会提前计算出它将要调用的所有键事件。如果该控件被禁用,VB将重构要调用的按键事件列表。因此,通过禁用该控件,我强制VB从工作流中删除其他关键事件(如Scroll)。然后我再次启用该控件,并将焦点返回给它。
泰达!
发布于 2010-05-10 15:08:23
尝试添加以下内容:
Private Sub List1_KeyPress(KeyAscii As Integer)
KeyAscii = 0
End Sub
https://stackoverflow.com/questions/1497950
复制相似问题