Visual c++ 如何修复CListctrl中的行和列重复

Visual c++ 如何修复CListctrl中的行和列重复,visual-c++,mfc,clistctrl,Visual C++,Mfc,Clistctrl,如何在MFC中修复CListctrl中的行和列重复 int nItem = 0; m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100); m_list.InsertColumn(1, _T("Area km\262"), LVCFMT_RIGHT, 80); m_list.InsertColumn(2, _T("Population"), LVCFMT_RIGHT, 100); m_list.SetExtendedStyle(LVS_EX_GR

如何在MFC中修复CListctrl中的行和列重复

int nItem = 0;
m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100);
m_list.InsertColumn(1, _T("Area km\262"), LVCFMT_RIGHT, 80);
m_list.InsertColumn(2, _T("Population"), LVCFMT_RIGHT, 100);
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
ModifyStyle(0, LVS_REPORT);

nItem = m_list.InsertItem(0, _T("Libya"), 8);
m_list.SetItemText(nItem, 1, _T("1,759,540"));
m_list.SetItemText(nItem, 2, _T("5,499,074"));

nItem = m_list.InsertItem(0, _T("Senegal"), 7);
m_list.SetItemText(nItem, 1, _T("196,190"));
m_list.SetItemText(nItem, 2,_T( "10,580,307"));

nItem = m_list.InsertItem(0, _T("Cuba"), 6);
m_list.SetItemText(nItem, 1, _T("110,860"));
m_list.SetItemText(nItem, 2, _T("11,263,429")); 

CListCtrl
不关心项目是否唯一。所以你必须自己处理

您需要为应该唯一的项创建并使用
std::map
甚至
std::set
结构,并在每次需要插入项或列时进行查找:

插入:

std::set<CString> listItems;
listItems.insert(columnName);

您也可以使用
CMap
MFC容器来完成此操作。

CListCtrl
不关心您的项目是否唯一。所以你必须自己处理

您需要为应该唯一的项创建并使用
std::map
甚至
std::set
结构,并在每次需要插入项或列时进行查找:

插入:

std::set<CString> listItems;
listItems.insert(columnName);

您也可以使用
CMap
MFC容器来执行此操作。

不是因为您在刷新内容之前没有清除列表。它再次追加行和列,而不是替换。刷新前先打电话


评论后更新:

是的,这样可以确认您刷新内容的频率太高或位置错误
DeleteAllItems()
将清除内容,而不是删除已添加的列标题


因此,要么(1)首先调用每个已经插入的列,要么(2)最好在一个更合适的位置插入列,这样只会发生一次。在对话的结尾说,我想你正在和他一起工作

不是因为在刷新内容之前没有清除列表。它再次追加行和列,而不是替换。刷新前先打电话


评论后更新:

是的,这样可以确认您刷新内容的频率太高或位置错误
DeleteAllItems()
将清除内容,而不是删除已添加的列标题


因此,要么(1)首先调用每个已经插入的列,要么(2)最好在一个更合适的位置插入列,这样只会发生一次。在对话的结尾说,我想你正在和他一起工作

使用功能时,行项目不重复,但列问题相同。使用功能时,行项目不重复,但列问题相同。