从 CListCtrl 检索当前列表项文本的问题

Posted

技术标签:

【中文标题】从 CListCtrl 检索当前列表项文本的问题【英文标题】:issue with retrieving current list item text from CListCtrl 【发布时间】:2015-11-03 07:15:30 【问题描述】:

我正在尝试从 CListCtrl 检索选定的列表项。第一项文本检索正确。稍后当我选择下一个时,只检索上一个列表项文本。下面是我从 CListCtrl 中选择项目时触发的事件方法。

示例场景

List(m_RListCtrl) -> Item1, Item2, Item3

我第一次单击/选择 Item2。在 m_EditBox 中显示的 Item2 文本。 接下来我点击Item3。 Item2 仍然显示 然后我单击 Item1。 Item3 显示在编辑框中 然后我点击Item2。显示项目 1。 ... ... ...

事件代码:

void CRTConfigDlg::OnLvnItemchangedRepoConfigList(NMHDR *pNMHDR, LRESULT *pResult)

    CString itemText = L"";

    itemText = m_RListCtrl.GetItemText(m_RListCtrl.GetSelectionMark(), 0);

    m_EditBox.SetWindowText(itemText);
    //UpdateWindow();

我什至尝试过Get Index of Item Text in MFC CListCtrl 的以下解决方案。但问题还是一样。

你能帮我知道,我哪里出错了吗?

【问题讨论】:

【参考方案1】:

您需要像这样遍历选定的项目:

int nColumns = m_RListCtrl.GetHeaderCtrl()->GetItemCount();
POSITION pos = m_RListCtrl.GetFirstSelectedItemPosition();
while (pos)

    int nItem = m_RListCtrl.GetNextSelectedItem(pos);

    for(int i=0; i<nColumns; i++)
    
        CString sItem = m_RListCtrl.GetItemText(nItem, i);
        // TO DO: do stuff with item text here
    

【讨论】:

在我的情况下只有一列,所以我猜我不需要 for 循环。无论如何,它现在可以工作了。谢谢【参考方案2】:

You can also use the Itemchanged Notification but you have to keep in mind, that this event is triggered when an item is selected and deselected.

所以你需要检查物品的状态。

void CAnyDialogClass::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)

    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    // check if the items state changed to selected.
    if ((pNMLV->uChanged & LVIF_STATE)!=0 && 
        (pNMLV->uOldState & LVIS_SELECTED)==0 && 
        (pNMLV->uNewState & LVIS_SELECTED)!=0)
    
        // This item is selected now
        ...

更精确的是使用 LVIS_FOCUSED。用户只需按住 Ctrl 键并使用光标移动键即可更改项目的焦点。

【讨论】:

以上是关于从 CListCtrl 检索当前列表项文本的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ListControl(ListView) 中检索数据?

从 SharePoint 2010 中的不同网站集中检索列表项

MFC CListCtrl 将一个列表的选中项添加到另一个列表

Clistctrl 项目文本颜色

MFC CListCtrl 更新任何单元格的文本

在 CEdit 文本更改时选择 CListCtrl 中的项目