全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1809
推到 Plurk!
推到 Facebook!

請教TListView元件無法取得選取Item的問題

尚未結案
algo
一般會員


發表:4
回覆:21
積分:10
註冊:2003-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 09:28:56 IP:203.74.xxx.xxx 未訂閱
在下使用TListView元件的report方式來做一些資料的列表, 然後讓使用者可以選擇想要的資料做處理,但是卻會發生 ListView->SelCount有正確的選擇數量,但是使用如下列 方式取出資料時卻僅剩下一筆資料...不知道各位先進有否 遇到這樣的問題?請不吝指教謝謝!    
 
void __fastcall TMyListView::ToolButton1Click(TObject *Sender)
{
   TItemStates UserSelected = TItemStates() << isSelected;
   TListItem *Item = ListView1->Selected;       if (ListView1->SelCount == 0){
        ShowMessage("未選擇處理項目.");
        return;
   }
   else{
        ShowMessage(ListView1->SelCount); //此項可正常列出所選資料數量
   }       //此迴圈跑一次Item就會NULL而停止
   while (Item){
        ShowMessage(Item->Caption);
        Item = ListView1->GetNextItem(Item, sdAll, UserSelected);
   }
}
PS:程式開始時前在下有先Clean Select ??? 發表人 - algo 於 2004/11/24 10:36:49
------
???
algo
一般會員


發表:4
回覆:21
積分:10
註冊:2003-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-24 09:55:41 IP:203.74.xxx.xxx 未訂閱
在下做了另外的測試,使用暴力法檢查所有的Item有沒有 被Select結果是正確的...OTZ 雖然有了解決的方法,但是在下還是很想知道之前的方法 有什麼問題會造成只能取讀到一筆選取資料^^;    
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
        for (i=0;i<=ListView1->Items->Count-1 ;i  )
        {
            if(ListView1->Items->Item[i]->Selected){
            Memo1->Lines->Add(ListView1->Items->Item[i]->Caption);
            }
        }
}
???
------
???
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-24 10:27:46 IP:61.63.xxx.xxx 未訂閱
引言: 在下使用TListView元件的report方式來做一些資料的列表, 然後讓使用者可以選擇想要的資料做處理,但是卻會發生 ListView->SelCount有正確的選擇數量,但是使用如下列 方式取出資料時卻僅剩下一筆資料...不知道各位先進有否 遇到這樣的問題?請不吝指教謝謝!
 
void __fastcall TMyListView::ToolButton1Click(TObject *Sender)
{
   TItemStates UserSelected = TItemStates() << isSelected;
   TListItem *Item = ListView1->Selected;       if (ListView1->SelCount == 0){
        ShowMessage("未選擇處理項目.");
        return;
   }
   else{
        ShowMessage(ListView1->SelCount); //此項可正常列出所選資料數量
   }       //此迴圈跑一次Item就會NULL而停止
   while (Item){
        ShowMessage(Item->Caption);
        Item = lstvwVirtualList->GetNextItem(Item, sdAll, UserSelected);
   }
}
PS:程式開始時前在下有先Clean Select ???
algo你好: 取自 class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { TItemStates selected = TItemStates() << isSelected; TListItem *Item = ListView1->Selected; while (Item){ ListBox1->Items->Add(Item->Caption); Item = ListView1->GetNextItem(Item, sdAll, selected); } } 試了一下,是可以正常work的,不過GetNextItem的第3個參數下的跟你的不一樣,不曉得你的那個參數是看那的,因為那個好像不是一定合法的參數< >! 嗯,結論是沒問題的,如果還有的話,也看看你的元件有沒有問題(因為你好像是自已新寫的)< >!
algo
一般會員


發表:4
回覆:21
積分:10
註冊:2003-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 10:40:42 IP:203.74.xxx.xxx 未訂閱
引言: 試了一下,是可以正常work的,不過GetNextItem的第3個參數下的跟你的不一樣,不曉得你的那個參數是看那的,因為那個好像不是一定合法的參數
m8815010您好: 關於您提到的GetNextItem的第3個參數來源就是程式一開始的 TItemStates UserSelected = TItemStates() << isSelected; 所以應該沒有什麼問題,目前在下還在找造成此方式無法使用的 原因^^; ???
------
???
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-24 12:05:07 IP:61.63.xxx.xxx 未訂閱
引言:
引言: 試了一下,是可以正常work的,不過GetNextItem的第3個參數下的跟你的不一樣,不曉得你的那個參數是看那的,因為那個好像不是一定合法的參數
m8815010您好: 關於您提到的GetNextItem的第3個參數來源就是程式一開始的 TItemStates UserSelected = TItemStates() << isSelected; 所以應該沒有什麼問題,目前在下還在找造成此方式無法使用的 原因^^; ???
algo你好: 歹勢,眼睛脫窗了,沒看到! 嗯,幫你 >!
ENIX007
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-24 13:52:47 IP:203.70.xxx.xxx 未訂閱
algo您好 挿個花,您該不會是MultiSelect沒有設成true吧(也就是沒多選) 因為我把您的code完整貼上測試結果是沒問題的  
 void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TListItem *item;
  static int index = 0;
  item = ListView1->Items->Add();
  item->Caption = index  ;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
   TItemStates UserSelected = TItemStates() << isSelected;
   TListItem *Item = ListView1->Selected;       if (ListView1->SelCount == 0){
        ShowMessage("未選擇處理項目.");
        return;
   }
   else{
        ShowMessage(ListView1->SelCount); //此項可正常列出所選資料數量
   }       //此迴圈跑一次Item就會NULL而停止
   while (Item){
        ShowMessage(Item->Caption);
        Item = ListView1->GetNextItem(Item, sdAll, UserSelected);
   }    }
執行是正常的喔... 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
algo
一般會員


發表:4
回覆:21
積分:10
註冊:2003-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-29 02:18:04 IP:203.67.xxx.xxx 未訂閱
在下還是無法找出問題所在...OTZ 暫時先結案,若有新發現回再回來分享給大家^^; ???
------
???
Reignson
一般會員


發表:3
回覆:11
積分:12
註冊:2005-01-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-18 19:39:37 IP:163.29.xxx.xxx 未訂閱
在下使用Delphi作處理用此法方法是正常的。 貼上其中片斷如下: oItem:=oFileList.GetNextItem(oItem,sdAll,oSelect); repeat sTemp:=sPath oItem.Caption; oItem:=oFileList.GetNextItem(oItem,sdAll,oSelect); until oItem=nil; 所以覺得可以試一下改成: void __fastcall TMyListView::ToolButton1Click(TObject *Sender) { TItemStates UserSelected = TItemStates() << isSelected; // TListItem *Item = ListView1->Selected; TListItem *Item; Item = ListView1->GetNextItem(Item, sdAll, UserSelected); if (ListView1->SelCount == 0){ ShowMessage("未選擇處理項目."); return; } else{ ShowMessage(ListView1->SelCount); //此項可正常列出所選資料數量 } //此迴圈跑一次Item就會NULL而停止 while (Item){ ShowMessage(Item->Caption); Item = ListView1->GetNextItem(Item, sdAll, UserSelected); } }
系統時間:2024-05-02 18:04:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!