无法在mfc listctrl中选择项目

时间:2017-01-10 06:11:08

标签: mfc

正在将项目添加到CListCtrl中。如果列表中存在特定项目,则需要选择该项目。 我尝试了以下代码,但该项目未被选中。

BOOL CsampleeeDlg::OnInitDialog()
{
     m_List.InsertColumn(0, _T("Full Name"), LVCFMT_LEFT, 90);
     m_List.InsertColumn(1, _T("Profession"), LVCFMT_LEFT, 90);
     m_List.InsertColumn(2, _T("Fav Sport"), LVCFMT_LEFT, 90);

     int nIndex = m_List.InsertItem(0, _T("Sandra C. Anschwitz"));
     m_List.SetItemText(nIndex, 1, _T("Singer"));
     m_List.SetItemText(nIndex, 2, _T("Handball"));

     nIndex = m_List.InsertItem(1, _T("Roger A. Miller"));
     m_List.SetItemText(nIndex, 1, _T("Footballer"));
     m_List.SetItemText(nIndex, 2, _T("Tennis"));

    int nCol = 0;  
    CString m_SearchThisItemText = _T("Sandra C. Anschwitz");
    int var=-1;
    for (int i = 0; i < m_List.GetItemCount(); i++)
    {
        CString szText = m_List.GetItemText(i, nCol);
        if (szText == m_SearchThisItemText)
        {    
        var=i;
        }
    }
    m_List.SetFocus();
    m_List.SetItemState (var, LVIS_SELECTED, LVIS_SELECTED);
    m_List.GetSelectionMark();

        return TRUE;  // return TRUE  unless you set the focus to a control
    }

请告诉我这里缺少什么?有什么提示吗? 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

答案是通过返回声明的样板注释暗示的。如果将焦点设置为其他控件,则将删除对CListCtrl所做的任何选择。这就是如果你返回TRUE会发生什么。 Windows将焦点设置为对话框上的默认控件,可能是“确定”按钮。

所以你可以通过return FALSE;从OnInitDialog修复它,而不必在返回之前将焦点设置为其他任何内容。

enter image description here