0

嗨,我使用有 20 个项目的 ClistCtrl,我想限制所选项目的数量。例如只能选择 10 个项目。我该怎么做?感谢您的帮助赫兹。

4

3 回答 3

1

您必须处理 LVN_ODSTATECHANGED 通知消息并在每次 LVIS_SELECTED 状态更改时计算所选项目的数量

谢谢

于 2011-03-14T13:03:39.077 回答
1

所以我写了这段代码。它应该工作。只需为列表创建一个事件处理程序

void CDatenbankView::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    int SelctedItems;
    SelctedItems = 0;
    int Index;

    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    for (Index = 0; Index < m_List.GetItemCount(); ) //Check every Item
    {
        if (m_List.GetItemState (Index, LVIS_SELECTED) == LVIS_SELECTED) //Checks if it is selected
        {
            if (SelctedItems > 10) 
            {
                MessageBox (_T("Cant select more than 10 Items"));
                for (Index = 0; Index < m_List.GetItemCount(); )
                {
                    m_List.SetItemState (Index, ~LVIS_SELECTED, LVIS_SELECTED);
                    Index++;
                }
                break;
            }
            else
            {
                SelctedItems++;
            }
        }
        Index++;
    }
    *pResult = 0;
}

m_List 是我的 CListCtrl 控制变量

于 2013-11-27T11:21:21.233 回答
0

此类功能没有内置功能。您必须为此编写您的代码。也许你可以找到另一种方法来做到这一点,比如有一个源列表和一个“选择列表”。您将项目从第一个复制/移动到第二个,但您不允许用户将超过 10 个项目放入目标列表中。

于 2011-03-14T13:16:02.770 回答