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

解决方案 »

  1.   

    function ListView_DeleteItem(hWnd: HWND; i: Integer): Bool;
    begin
      Result := Bool( SendMessage(hWnd, LVM_DELETEITEM, i, 0) );
    end;
    直接调用函数不就行了
      ListView_DeleteItem(ListView1.Handle, ListView1.Selected.Index)
      

  2.   

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

  3.   

    看看为啥直接调用Item的Delete方法只删除一个??
    procedure TListItem.Delete;
    begin
      if not FDeleting and (Self <> ListView.FTempItem) then Free;
    end;destructor TListItem.Destroy;
    begin
      FDeleting := True;
      if Owner.Owner.FLastDropTarget = Self then
        Owner.Owner.FLastDropTarget := nil;
      if ListView.HandleAllocated then
        ListView_DeleteItem(Handle, Index);
      FSubItems.Free;
      inherited Destroy;
    end;
      

  4.   


    http://topic.csdn.net/u/20080630/09/5d6de97f-a684-426e-b02a-15e07f79caf6.html