我正在尝试处理我在其他问题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;
如何处理此异常?