在列表控制(MFC)中删除重复项
Removing duplicates in List Control (MFC)
所以,我一直在努力防止在列表控制中添加文本/项目重复(它是由文件浏览器添加的)。我正在为我的定制需求开发一个新的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
变量是CListCtrl
,那么我想知道为什么您不检查FindItem
的返回值,因为您当前的表达式将始终评估为true,除非索引为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完成的格式化 !
相关文章:
- C++如何通过用户输入删除列表元素
- 删除列表中的第n个元素
- 删除列表 c++ 中的最后 3 个元素
- 链表.如何删除列表中的第一个节点?
- 在 c++ 中删除列表中的重复元素
- 如何删除列表中的动态分配类对象<T>?
- 无法在C 中删除列表元素
- 使用共享_ptr删除列表中的对象
- 删除列表向量中的元素并显示当前列表
- 如何在C++中删除列表中的某些元素
- 当删除列表元素时,在迭代器结束时会发生什么
- 删除列表中的对象后,为什么可以访问该对象的成员变量
- 如何删除列表中的字符串
- C++迭代时删除列表成员:标准解决方案不起作用
- 迭代时删除列表中的最后一个元素会导致错误
- 如何正确删除列表中的对象
- 在 c++ 中删除列表
- 当链表节点是用"new"构造时,如何删除列表?
- 从另一个 c++ 中删除 1 列表中出现的所有元素
- 删除列表 CPP 中的重复项