为什么这个程序会引发异常?

时间:2015-09-13 15:25:09

标签: delphi listview delphi-xe7

我正在尝试处理我在其他问题here中提到的问题,因此我尝试使用不同的程序在listview内交换项目。

以下是我尝试使用的程序

procedure ExchangeItems(lv: TListView; Const ItemFrom, ItemTo: Integer);
var
    Source, Target: TListItem;
begin
    lv.Items.BeginUpdate;

    try
        Source := lv.Items[ItemFrom];
        Target := lv.Items.Insert(ItemTo);
        Target.Assign(Source);
        Source.Free;
    finally
        lv.Items.EndUpdate
    end;
end;

它工作得非常好,但有时在使用我的应用程序并通过快速点击多次请求此过程后,它会交换我listview中不存在的空项并引发此异常

  

第一次机会异常,价格为75164B32美元。异常类EConvertError   消息'无法为TListItem指定nil'。

如果满足某些条件,那就是我如何交换物品

procedure TFORM1.UpdateVisual(Sender: TObject; AUserData: Pointer; var AImage: TGifImage);
var
 Item: TListItem;
 i : integer;
begin
 Item := TListItem(AUserData);

  if ListView1.Items.IndexOf(Item) = -1 then
    Exit;

  Item.Data := AImage;
  AImage := nil;
// if recorder is active then select item that equal to ClientID and exchange it to Top
if recorder = True then
      begin
       for i := 0 to ListView1.Items.Count-1
     do if ListView1.Items[i].SubItems[3] = IntToStr(ClientID)
     then
     begin
     ExchangeItems(ListView1, Item.Index, 0);
     ListView1.Invalidate;
     end;
   end;
end;

如何处理此异常?

0 个答案:

没有答案