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