MFC限制ClistCtrl中的选定项

发布于 2024-10-21 16:40:40 字数 81 浏览 1 评论 0原文

你好 我使用有 20 个项目的 ClistCtrl,我想限制所选项目的数量。 例如只能选择 10 个项目。 我怎样才能做到呢? 感谢赫兹尔的帮助。

Hi
I use ClistCtrl that have 20 items and I want to limit selected item number.
for example only 10 item can be selected.
how i can do it?
thanks for your help herzl.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

友谊不毕业 2024-10-28 16:40:41

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

谢谢

You would have to handle the LVN_ODSTATECHANGED notification message and count the number of selected item each time the LVIS_SELECTED state changes

Thanks

与之呼应 2024-10-28 16:40:41

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

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 控制变量

So I wrote this code. It should work. Just create an event handler for the list

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 is my control variable for the CListCtrl

听,心雨的声音 2024-10-28 16:40:41

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

There is no built-in functionality for such a feature. You'd have to write your our code for that. Maybe you can find another way to do it, like having a source list and a "selection list". You copy/move items from the first to the second, but you do not allow the users to put more than 10 items into the destination list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文