TCheckListBox получить количество проверенных элементов

У меня простой вопрос. Как получить количество проверенных элементов в CheckBoxListBox без использования цикла?


person Community    schedule 16.04.2015    source источник


Ответы (3)


TCheckListBox не предоставляет вариант, который вы ищете. Требуется цикл по его свойству Checked[].

Если вы использовали Delphi, вы могли бы создать помощник класса, чтобы скрыть эта петля. Но помощники классов недоступны в C++.

person Remy Lebeau    schedule 17.04.2015

В Delphi вы можете [*] сделать следующее:

TCustomMultiSelectListControl(TheBox).MultiSelect := True;

и тогда работает SelCount:

CountOfCheckedItems := TheBox.SelCount;

Разве эквивалент не возможен в C++?

[*] Хотя это вызывает другие проблемы.

person dougwoodrow    schedule 02.02.2016
comment
На самом деле, забудьте об этом - он даже не всегда возвращает правильный счет. - person dougwoodrow; 02.02.2016
comment
SelCount — это количество выбранных (не проверенных) элементов в списке, когда MultiSelect имеет значение true. Это не сработает в этом вопросе - person Shahram Banazadeh; 06.07.2019

вы можете использовать такую ​​функцию.

function GetCheckedCount(CH:TCheckListBox):Integer;
var I:Integer;
begin
   Result := 0;
    for i := 0 to ch.Items.Count - 1 do
      if ch.Checked[i] then inc(result);
end;

Кроме того, SelCount — это количество "выбранных" элементов, когда MultiSelect имеет значение true, а не количество "отмеченных" элементов.

person Shahram Banazadeh    schedule 06.07.2019
comment
Это похоже на петлю для меня :). Цикла можно избежать, обновив глобальную переменную счетчика в событии TCheckListBox.OnClickCheck. Тем не менее, хорошее замечание о значении SelCount, спасибо! - person dougwoodrow; 07.07.2019