C++ 删除列表控件(MFC)中的重复项

C++ 删除列表控件(MFC)中的重复项,c++,mfc,C++,Mfc,所以,我一直试图阻止在列表控件中添加重复的文本/项目(它是通过文件浏览器添加的)。。我正在为我的定制需求开发一个新的dll注入器,这是我唯一面临的问题,我一直在努力解决,但它仍然不是最好的选择 我一直想做的是: CFileDialog FileDialog(TRUE, L"*.*", NULL, OFN_HIDEREADONLY, L"Dynamic Link Library (*.dll)|*.dll||"); if (FileDialog.DoModal() == IDOK)

所以,我一直试图阻止在列表控件中添加重复的文本/项目(它是通过文件浏览器添加的)。。我正在为我的定制需求开发一个新的dll注入器,这是我唯一面临的问题,我一直在努力解决,但它仍然不是最好的选择

我一直想做的是:

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);
        }
    } 

假设您的
DllBox
变量是,那么我想知道您为什么不检查的返回值,因为您当前的表达式将始终计算为true,除非索引为0

返回值:
项目的索引(如果成功),否则为-1


如果您还将新选择的路径存储在容器
dllpates
中,为什么不也在该容器中搜索,并防止添加该路径

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

你也应该考虑给你的变量一个以小写字母开头的名字。尤其是使用MFC类时,您可能很快就会感到困惑。


FileDialog
是继承自
CFileDialog
的类,还是变量?您甚至可以看到Stackoverflow完成的格式化

谢谢,如果没有找到它,我不知道它的返回值是-1,我想定期检查它可以完成工作。它现在正在工作:)
CString csSelected = FileDialog.GetPathName();
std::find(DllPathes.begin(), DllPathes.end(), [&](const CString &c)
                                              {return csSelected.Compare(c);});