大家好,情况是这样的,我在VB增强搜索插件中,使用了列表重绘功能,这样可以使用不同颜色区别位置信息和匹配行,还可以用粗体显示匹配的关键字,但是,重绘的时候出现了两个问题,虽然不是很大,但是使用起来会感到不是很舒服.第一个问题是,由于VB的局限性,必须将列表的Style设为复选框才可以执行重绘,虽然可以直接判断元素的焦点状态进行绘制焦点元素的操作,但当用户定位代码的时候,列表框会失去焦点,此时列表的所有元素均是未选中状态,当然可以通过判断Selected来控制选中元素的重绘操作,但是,由于是CheckBox,所以实现起来比较麻烦(我已经通过此方式实现了),更为重要的是,有的时候,列表会显示两个元素,就是当列表刚刚获得焦点的时候,此时会同时显示焦点元素和选中元素.请问有没有好的解决方式?第二个问题是,关于列表元素很多的时候(大概2-3万个元素),此时把列表下拉到底部,然后切换其中的元素,可以看到列表在切换选中元素的速度非常的慢,请问是否可以解决呢?第三个问题是,关于在搜索过程中,列表闪动很厉害的问题,如何可以防止闪动呢?

解决方案 »

  1.   

    大数据量加在 ListBox 控件中不合适。应该自己存储列表数据,自己查找。
    既然能重绘,那么很容易知道 ListBox 一次可以显示最多的条数(比如 10 条);
    在列表框右边加一个滚动条,根据滚动信息,只在列表框中填充 10 条数据,应该没有你的问题了。
      

  2.   

    第一个问题已经解决了,方式如下:
    在列表失去焦点的时候记录item信息,包括长宽等等..
    在列表获得焦点的时候,首先根据上次记录的item信息清空选择..
      

  3.   

    所有的问题都解决了:)
    方式是通过"vbalODCL6"控件,该控件支持重绘.
    但由于对中文支持的不好,需要修改其中的一处代码才可以使用.