2015-07-28 59 views
2

)所以,我一直在試圖防止在列表控件中添加文本/這是我面臨的唯一問題,我一直在努力修復,但它仍然不是最好的選擇。刪除列表控件中的重複項(

我一直在努力做的事情:

CFileDialog FileDialog(TRUE, L"*.*", NULL, OFN_HIDEREADONLY, L"Dynamic Link Library (*.dll)|*.dll||"); 

    if (FileDialog.DoModal() == IDOK) 
    { 
     CString DllName = FileDialog.GetFileName(); 
     DllPathes.push_back(FileDialog.GetPathName()); 
     LVFINDINFO tempFind; 
     tempFind.psz = DllName; 
     tempFind.flags = LVFI_STRING; 

     if (DllBox.FindItem(&tempFind)) 
     { 
      DllBox.InsertItem(0, DllName); 
     } 
    } 

回答

3

假設你DllBox變量是CListCtrl,那麼我想知道你爲什麼不檢查FindItem的返回值,作爲當前表現將始終評估爲如此,除非該指數爲0

返回值:
該項目的索引,如果成功或-1否則。


if (DllBox.FindItem(&tempFind) == -1) //Not found ! 
{ 
    DllBox.InsertItem(0, DllName); 
} 

如果您還容器DllPathes新選擇存儲路徑,你爲什麼不在該容器中搜索過,並防止它被添加?

CString csSelected = FileDialog.GetPathName(); 
std::find(DllPathes.begin(), DllPathes.end(), [&](const CString &c) 
               {return csSelected.Compare(c);}); 

你也應該考慮給你的變量,以小寫字母開頭的名稱。特別是對於MFC類,您可能會很快感到困惑。 可能FileDialog是從CFileDialog繼承的類,還是它是一個變量? 你甚至可以看到由Stackoverflow完成的格式!

+0

謝謝,我不知道它的返回值,如果它沒有找到-1,我經常檢查它會完成工作。它現在正在工作:) – Frought