線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:984
推到 Plurk!
推到 Facebook!

TListView加入Item會少一個

尚未結案
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-21 15:52:54 IP:140.113.xxx.xxx 未訂閱
各位板上先進好,在這有一個關於TListView的問題要請教。 就是當我把資料加入TListView的時候,最後一筆資料會顯示不出來。
我的做法是這樣: 0.TListView設成vsReport 1.把文字檔讀入TStringList 2.每一行依序讀出,切割欄位之後,加入到TListView 以下是我的片段程式碼
 
        // sl是TStringList, data是TListItem, lvUser是TListView            for( i = 0; i < sl->Count; i   )
        {
            data = lvUser->Items->Add() ;
            data->Caption = sl->Strings[i].SubString(1,10);
            data->SubItems->Add(sl->Strings[i].SubString(10, 20));
        }
我有在加完之後用ShowMessage秀出sl跟lvUser的Count,兩者是相同的。 完全想不透是為什麼阿~~ 我也找了別的測資了,還是都會少掉最後一個。
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-21 17:25:58 IP:210.243.xxx.xxx 未訂閱
chtai您好 小弟利用您的程式碼實作,並不會有這個情形阿?? 除非,您最後有加這行: delete data; 如果沒有,能請您放上完整程式嗎 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-21 20:20:05 IP:140.113.xxx.xxx 未訂閱
那小弟就獻醜了,這段程式碼的功用是按下按鈕之後, 會讓使用者去選取RaidenFTPD的使用者設定檔(xxx.user) 並檢查是否有鎖ip表(xxx.allow),有的話一同載入。 (都是先載入TStringList之後再一行行處理)
處理xxx.user檔的方式是用很笨的方式切出各欄位並存入TListView的欄位中。 處理xxx.allow檔則是依的方式存入multimap中。 (標記紅色者就是存入TListView的程式碼)
void __fastcall TForm1::btnSelectFileClick(TObject *Sender)
{
    if( OpenDialog1->Execute() )
    {
        char buff[512];
        TStringList *sl = new TStringList;
        TStringList *gp = new TStringList;
        TStringList *ip = new TStringList;
        sl->Sorted = true;
        gp->Sorted = true;
        gp->Duplicates = dupIgnore;
        TListItem *data;
        edtOpenFile->Text = OpenDialog1->FileName ;
        sl->LoadFromFile(OpenDialog1->FileName);            String s = edtOpenFile->Text.SubString(0, edtOpenFile->Text.Length() - 5 )  
                   ".allow";
        UserData.clear();
        if( FileExists(s) )
        {
            ip->LoadFromFile(s);
            for( i = 0; i < ip->Count; i   )
            {
                strcpy(buff, ip->Strings[i].c_str());
                AnsiString Name = AnsiString(strtok(buff, "@"));
                AnsiString Data = AnsiString(strtok(NULL, ""));
                UserData.insert(UserDataType(Name, Data));
            }
        }            cbGroup->Clear();
        lvUser->Items->Clear() ;
        lvUser->Tag = 0;
        isDesc = 1;            int k=0, p[22]; // p 是記錄 : 位置的 array
        for( i = 0; i < sl->Count; i   )
        {
            strcpy(buff, sl->Strings[i].c_str());
            for( j = 0; j < sl->Strings[i].Length(); j   )
                if( buff[j] == ':' )
                    p[k  ] = j; // 記錄每個 : 的位置                            data = lvUser->Items->Add() ;
            data->Caption = sl->Strings[i].SubString(1, p[0]);
            for( k = 1; k < 22; k   )
            {
                if( k == 2 || k == 18 )
                    continue;
                data->SubItems->Add(sl->Strings[i].SubString(p[k-1] 2, p[k]-p[k-1]-1));
            }
            gp->Add(data->SubItems->Strings[1]);                k = 0;
        }            cbGroup->Items->AddStrings(gp);
        btnModify->Enabled = true;
        delete data;
        delete ip;
        delete gp;
        delete sl;
    }
}
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-22 04:24:03 IP:211.76.xxx.xxx 未訂閱
chtai你好:    我改了一下你紅色部分的Code,看看能不能正確的作用。另外要注意p array夠不夠大。  
 
        for( i = 0; i < sl->Count; i   )
        {
            strcpy(buff, sl->Strings[i].c_str());
            for( j = 0; j < sl->Strings[i].Length(); j   )
                if( buff[j] == ':' )
                    p[k  ] = j; // 記錄每個 : 的位置                p[k  ] = sl->Strings[i].Length()-1;//加上這行                            data = lvUser->Items->Add() ;
            data->Caption = sl->Strings[i].SubString(1, p[0]);
            for( k = 1; k < 22; k   )
            {
                if( k == 2 || k == 18 )
                    continue;
                data->SubItems->Add(sl->Strings[i].SubString(p[k-1] 2, p[k]-p[k-1]-1));
            }
            gp->Add(data->SubItems->Strings[1]);                k = 0;
        }    
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-22 10:50:53 IP:140.113.xxx.xxx 未訂閱
引言: chtai你好: 我改了一下你紅色部分的Code,看看能不能正確的作用。另外要注意p array夠不夠大。
 
        for( i = 0; i < sl->Count; i   )
        {
            strcpy(buff, sl->Strings[i].c_str());
            for( j = 0; j < sl->Strings[i].Length(); j   )
                if( buff[j] == ':' )
                    p[k  ] = j; // 記錄每個 : 的位置                p[k  ] = sl->Strings[i].Length()-1;//加上這行                            data = lvUser->Items->Add() ;
            data->Caption = sl->Strings[i].SubString(1, p[0]);
            for( k = 1; k < 22; k   )
            {
                if( k == 2 || k == 18 )
                    continue;
                data->SubItems->Add(sl->Strings[i].SubString(p[k-1] 2, p[k]-p[k-1]-1));
            }
            gp->Add(data->SubItems->Strings[1]);                k = 0;
        }    
沒用哩~~我加上pwipwi兄的這一行之後 同樣的問題還是會發生。 (而且說真的,我不懂這一行的道理在哪^^a)
真的很奇怪,我把資料都加入lvUser之後用這一行來查看
        ShowMessage(lvUser->Items->Item[lvUser->Items->Count -1 ]->Caption);
的確有最後一筆資料阿,只是不知怎樣就是顯示不出來 發表人 - chtai 於 2004/06/22 11:15:45
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-22 13:45:17 IP:211.76.xxx.xxx 未訂閱
這聽起來真是奇怪…, 需要請你post資料檔上來看看是什麼樣子.... 不然只好請版上高手們來解決囉 另外你也可以試試把資料刪到只剩一行,再去trace看看到底發生了什麼事。 發表人 - pwipwi 於 2004/06/22 14:02:29
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-22 21:19:55 IP:140.113.xxx.xxx 未訂閱
引言: 這聽起來真是奇怪…, 需要請你post資料檔上來看看是什麼樣子.... 不然只好請版上高手們來解決囉 另外你也可以試試把資料刪到只剩一行,再去trace看看到底發生了什麼事。 發表人 - pwipwi 於 2004/06/22 14:02:29
資料檔就是很多行以下的資料格式 chtai:2::ROOT:1:0:0:0:0:0:27959673:1120302::default:65423:0.00:0:0:::1:1: 我試過就只有一行資料,依然不會顯示出來。 完全不知是怎麼個一回事阿。
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-23 00:02:05 IP:140.113.xxx.xxx 未訂閱
 
        for( i = 0; i < sl->Count; i   )
        {
            strcpy(buff, sl->Strings[i].c_str());
            for( j = 0; j < sl->Strings[i].Length(); j   )
                if( buff[j] == ':' )
                    p[k  ] = j; // 記錄每個 : 的位置
            data = lvUser->Items->Add() ;
            data->Caption = sl->Strings[i].SubString(1, p[0]);
            for( k = 1; k < 22; k   )
            {
                if( k == 2 || k == 18 )
                    continue;
                data->SubItems->Add(sl->Strings[i].SubString(p[k-1] 2, p[k]-p[k-1]-1));
            }
            gp->Add(data->SubItems->Strings[1]);                k = 0;
        }
        data = lvUser->Items->Add();
我加上這一行之後,最後一筆資料就會顯現出來了~ 好怪喔,有沒有人知道為什麼我原本沒有這一行的寫法跑不出資料呢? 不是應該可以的嗎?
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-23 01:49:28 IP:211.76.xxx.xxx 未訂閱
ENIX007之前說,除非你有加上delete data..... 看來解答早就出來了 是最後一個
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-06-23 10:20:51 IP:140.113.xxx.xxx 未訂閱
引言: ENIX007之前說,除非你有加上delete data..... 看來解答早就出來了 是最後一個>< face="Verdana, Arial, Helvetica"> 呃阿 看來似乎就是這麼一回事了... 可是
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-06-23 16:44:12 IP:211.76.xxx.xxx 未訂閱
引言:
引言: ENIX007之前說,除非你有加上delete data..... 看來解答早就出來了 是最後一個>< face="Verdana, Arial, Helvetica"> 呃阿 看來似乎就是這麼一回事了... 可是>< face="Verdana, Arial, Helvetica"> 用new配置出來的才需要用到delete喔。
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-06-23 16:54:27 IP:140.113.xxx.xxx 未訂閱
引言:
引言: 呃阿 看來似乎就是這麼一回事了... 可是>< face="Verdana, Arial, Helvetica"> 用new配置出來的才需要用到delete喔。
原來如此,這樣問題就解決了, 我那大量管理雷電FTPD使用者設定及鎖ip的小程式也可完工了:) 感謝大家的幫忙, 也感謝ENIX007兄一開始就指出問題所在,只可惜小弟不才一直沒發現。
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
系統時間:2024-06-29 13:49:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!