2017-01-10 125 views
2

項目正被添加到CListCtrl中。如果列表中存在特定項目,則需要選擇該項目。 我已經嘗試了以下代碼,但該項目未被選中。無法使項目在mfc listctrl中被選中

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 
    } 

您能否讓我知道這裏缺少什麼?任何提示? 感謝您的幫助

+0

如果var不是-1,它應該顯示一個選定的項目。你使用LVS_SHOWSELALWAYS嗎?如果不是該項目只顯示爲選中,如果它有焦點。 – xMRi

+0

yes var is not -1 here.using LVS_SHOWSELALWAYS did not select the item – Nancy

+0

try this'm_List.SetItemState(var,LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);' – kajojeq

回答

1

答案由標準評論提供給return語句。如果將焦點設置爲某個其他控件,則對CListCtrl所做的任何選擇都將被刪除。而這正是如果你返回TRUE會發生什麼。 Windows會將焦點設置爲對話框上的默認控件,可能是確定按鈕。

因此,您可以通過OnInitDialog中的return FALSE;修復它,而不必在返回之前將焦點設置爲其他任何內容。

enter image description here