ListView 沒有 Move 的方法...要怎麼 Move ? |
尚未結案
|
te_hsun
一般會員 發表:43 回覆:34 積分:20 註冊:2002-03-25 發送簡訊給我 |
這一段程式,新增加的那個Item會是空白的...
請問哪裡弄錯了??
procedure TForm1.Move(CurIndex, NewIndex: Integer); var FListItem, NewItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin FListItem:= ListView1.Items[CurIndex]; ListView1.Items.Delete(CurIndex); NewItem:= ListView1.Items.Insert(NewIndex); NewItem:= FListItem; end; end; |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 這一段程式,新增加的那個Item會是空白的... 請問哪裡弄錯了??Delete之後該Item的資訊會被清掉, 所以你要這樣改procedure TForm1.Move(CurIndex, NewIndex: Integer); var FListItem, NewItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin FListItem:= ListView1.Items[CurIndex]; ListView1.Items.Delete(CurIndex); NewItem:= ListView1.Items.Insert(NewIndex); NewItem:= FListItem; end; end; procedure TForm1.Move(CurIndex, NewIndex: Integer); var NewItem: TListItem; szCaption: String; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin szCaption:= ListView1.Items[CurIndex].Caption; ListView1.Items.Delete(CurIndex ); NewItem:= ListView1.Items.Insert(NewIndex ); NewItem.Caption := szCaption; end; end; |
te_hsun
一般會員 發表:43 回覆:34 積分:20 註冊:2002-03-25 發送簡訊給我 |
引言:雖然這樣可以取得 Caption 但是其他的資料(例:SubItems...)還需一個一個設定 有更簡便的方法嗎?procedure TForm1.Move(CurIndex, NewIndex: Integer); var NewItem: TListItem; szCaption: String; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin szCaption:= ListView1.Items[CurIndex].Caption; ListView1.Items.Delete(CurIndex ); NewItem:= ListView1.Items.Insert(NewIndex ); NewItem.Caption := szCaption; end; end; |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言:引言:雖然這樣可以取得 Caption 但是其他的資料(例:SubItems...)還需一個一個設定 有更簡便的方法嗎?procedure TForm1.Move(CurIndex, NewIndex: Integer); var NewItem: TListItem; szCaption: String; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin szCaption:= ListView1.Items[CurIndex].Caption; ListView1.Items.Delete(CurIndex ); NewItem:= ListView1.Items.Insert(NewIndex ); NewItem.Caption := szCaption; end; end; procedure TForm1.Move(CurIndex, NewIndex: Integer); var NewItem, CopyItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin CopyItem := TListItem.Create(ListView1.Items); CopyItem.Assign(ListView1.Items.Item[CurIndex]); ListView1.Items.Delete(CurIndex); NewItem := ListView1.Items.Insert(NewIndex); NewItem.Assign(CopyItem); CopyItem.Free; end; end;發表人 - zard 於 2005/01/18 14:12:50 |
ajaxhuang
一般會員 發表:2 回覆:5 積分:1 註冊:2003-03-24 發送簡訊給我 |
procedure TForm1.Move(CurIndex, NewIndex: Integer); var FListItem, NewItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin FListItem := TListItem.Create(ListView1.Items); FListItem.Assign(ListView1.Items[CurIndex]); ListView1.Items[CurIndex].Assign(ListView1.Items[NewIndex]); ListView1.Items[NewIndex].Assign(FListItem); FListItem.Delete; end; end;試試看... 哈哈...有人比我快~ 發表人 - ajaxhuang 於 2005/01/18 14:22:13 |
te_hsun
一般會員 發表:43 回覆:34 積分:20 註冊:2002-03-25 發送簡訊給我 |
哇...兩種方法都可以用耶!!
一個是互換,一個是增減...哪個好呢?
若修正如下的程式片段,有必要加上 try ..finally 嗎?
procedure TForm1.Move(CurIndex, NewIndex: Integer); var FListItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin FListItem := TListItem.Create(ListView1.Items); try FListItem.Assign(ListView1.Items[CurIndex]); ListView1.Items[CurIndex].Assign(ListView1.Items[NewIndex]); ListView1.Items[NewIndex].Assign(FListItem); finally FListItem.Free; end; end; end; |
ajaxhuang
一般會員 發表:2 回覆:5 積分:1 註冊:2003-03-24 發送簡訊給我 |
|
te_hsun
一般會員 發表:43 回覆:34 積分:20 註冊:2002-03-25 發送簡訊給我 |
在實作以後,以下的方法比較符合move的意思...
因為"互換"和"搬移"是不一樣的...呵呵 ^^"
procedure TForm1.Move(CurIndex, NewIndex: Integer); var NewItem, CopyItem: TListItem; begin if (NewIndex < 0) or (NewIndex >= ListView1.Items.Count) then exit; if CurIndex <> NewIndex then begin CopyItem := TListItem.Create(ListView1.Items); try CopyItem.Assign(ListView1.Items.Item[CurIndex]); ListView1.Items.Delete(CurIndex); NewItem := ListView1.Items.Insert(NewIndex); NewItem.Assign(CopyItem); finally CopyItem.Free; end; end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |