【问题标题】:unable to make the item as selected in mfc listctrl无法在 mfc listctrl 中选择项目
【发布时间】:2017-01-10 16:46:21
【问题描述】:

项目正在添加到 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
    }

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

【问题讨论】:

  • 如果 var 不是 -1 它应该显示一个选定的项目。你用过 LVS_SHOWSELALWAYS 吗?如果不是,则该项目仅在具有焦点时才显示为选中状态。
  • 是的,这里的 var 不是 -1。使用 LVS_SHOWSELALWAYS 没有选择项目
  • 试试这个m_List.SetItemState (var, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);

标签: mfc


【解决方案1】:

返回语句的样板注释暗示了答案。如果焦点设置到某个其他控件,您对 CListCtrl 所做的任何选择都将被删除。如果您返回 TRUE,这正是会发生的事情。 Windows 会将焦点设置为对话框上的默认控件,可能是确定按钮。

因此,您可以通过 OnInitDialog 中的return FALSE; 修复它,而无需在返回之前将焦点设置为其他任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多