delphi 7 sendmessage LVM_DELETEITEM 为什么一次删除两条记录?????
可是我选中的只有一条。

解决方案 »

  1.   

    估计也没什么人这样用 delphi 的
    LVM_DELETEITEM 的 WParam 是 index, 所以, 我觉得不太可能
      

  2.   

    这个问题建议楼主不用问了,应该算是VCL当中的一个BUG。
    首先ListView是一个系统控件,它的数据实际上分为两部分,一部分存储由系统的API进行管理,另一部分由VCL控件TListView这个类进行管理。
    当试图发送一个 LVM_DELETEITEM消息之后,首先响应该消息的是API,于是会把某一个Index删除掉,并且把内部的Index更新掉,然后通知TListView该消息,TListView收到消息之后,就通知相应的ListItem删除,而ListItem并不知道该消息已经触发了,以为是VCL内部删除,于是又发一个LVM_DELETEITEM消息。从而重复删除。实际上此时在TListView类管理的的数据当中,后面被删除的那个ListItem是存在于内存的,但是由于TListView的重绘是根据API当中的消息来重绘的,而在系统内部已经被删除掉了,所以就没有再通知重绘,自然被刷新之后就再也看不到了。