Ограничение MFC выбранного элемента в ClistCtrl
Привет я использую ClistCtrl, которые имеют 20 предметов, и я хочу ограничить количество выбранных предметов. например, можно выбрать только 10 элементов. как я могу это сделать? спасибо за помощь herzl.
3 ответа
Вам нужно будет обработать уведомление LVN_ODSTATECHANGED и подсчитать количество выбранных элементов каждый раз, когда изменяется состояние LVIS_SELECTED.
Спасибо
Поэтому я написал этот код. Он должен работать. Просто создайте обработчик событий для списка
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
Для такой функции нет встроенной функциональности. Вы должны написать свой код для этого. Может быть, вы можете найти другой способ сделать это, например, иметь список источников и "список выбора". Вы копируете / перемещаете элементы с первого на второй, но не позволяете пользователям помещать более 10 элементов в список назначения.