2015-05-25 47 views
0

enter image description here如何解決在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_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")); 
+0

@Michael Walz謝謝... – abhi312

回答

2

是不是你沒有清理清單之前刷新內容。它會重新添加行和列,而不是替換。刷新前請致電m_list.DeleteAllItems()。評論後


更新:

權,因此,確認您更新的內容過於頻繁或者在錯誤的地方。 DeleteAllItems()將清除內容,不會刪除已添加的列標題。因此,無論是(1)首先在每個已插入的列上調用DeleteColumn(),或者(2)最好將列插入到只會發生一次的更合適的位置。在我假定你正在使用的對話框的OnInitDialog()中說。

+0

通過使用函數行項不重複但是對於列問題是一樣的。 – abhi312

3

CListCtrl不關心你的物品是否應該是唯一的。所以你必須自己處理。

您需要創建和使用std::map或物品應該是唯一的,甚至std::set結構,並在每次需要插入一個項目或一個欄的時間進行查找:

插入:

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

查找:

const bool is_in = listItems.find(element) != listItems.end(); 

你也可以使用CMap MFC容器來做到這一點。