交換 ListItem 後 ItemIndex 異常 |
尚未結案
|
dadai
一般會員 ![]() ![]() 發表:29 回覆:31 積分:12 註冊:2009-01-17 發送簡訊給我 |
小弟目前嘗試在 TListView 上做上下兩筆資料的交換移動
但是沒找到有關swap相關的function 所以用了很蠢的方式來實現: 1. 資料存在一個 List 2. 交換 List 的上下兩筆資料 3. 將 ListView 清掉重新顯示一次 4. 指定 ListView 的 ItemIndex 到新的位置 但是現在卻發生了一些詭異的問題 我一個一個列出來 a. 將某個 ListItem 往下移動的時候,雖然 ListView 上的排列顯示是正確的,但是 ItemIndex 卻會跳到第一筆資料 b. 將某個 ListItem 往上移動的時候,ListView 上的排列是正確的,ItemIndex 的位址也是正確的。但是這時候如果我按上或是下, ItemIndex 會跳到第一筆資料 以下是我程式的寫法 [code cpp] int tmpIndex = listView->ItemIndex; ItemSwap( tmpIndex, tmpIndex 1); // 往下移動 listView->Items->BeginUpdate(); listView->Items->Clear(); for(int i=0; i<顯示的數量; i) { TListItem* tmpItem = listView->Items->Add(); tmpItem->Caption = IntToStr( i ); } listView->Items->EndUpdate(); listView->ItemIndex = tmpIndex 1; [/code] 請問我這樣寫法哪邊有問題嗎? 我該怎麼做才可以正確的移到預期的 ListItem ? 編輯記錄
dadai 重新編輯於 2011-01-27 02:39:13, 註解 無‧
|
dadai
一般會員 ![]() ![]() 發表:29 回覆:31 積分:12 註冊:2009-01-17 發送簡訊給我 |
|
senso
高階會員 ![]() ![]() ![]() ![]() 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
從你的程式碼來看tmpindex除了第一行取值應該不會變才對
你有試著下中斷點看tmpindex嗎 我的寫法 [code cpp] void TForm1::swap(int i1,int i2) { TListItem *selitem = ListView1->Selected; TListItem *tmpitem = ListView1->Items->Item[i2]; TListItem *newitem = ListView1->Items->Insert(i1); newitem->Assign(tmpitem); if (tmpitem==selitem) { //因為tmp下面被del掉,補selected和focused newitem->Selected = true; newitem->Focused = true; } tmpitem->Delete(); } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |