2017-01-10 7 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

はいvarは-1ではありません。使用LVS_SHOWSELALWAYSは、このアイテムを選択しませんでした – Nancy

+0

この 'm_List.SetItemState(var、LVIS_SELECTED | LVIS_FOCUSED、LVIS_SELECTED | LVIS_FOCUSED); – kajojeq

答えて

1

返答文の定型訳で答えが示唆されています。フォーカスが他のいくつかのコントロールに設定されている場合、CListCtrlへの選択は削除されます。 TRUEを返すと、まさにそれが起こります。 Windowsではダイアログのデフォルトのコントロール、おそらく[OK]ボタンにフォーカスが設定されます。

したがって、返す前にフォーカスを設定することなく、OnInitDialogからreturn FALSE;で修正します。

enter image description here

関連する問題