Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка отмеченных CheckListBox 
:(
    Опции темы
SandiK
Дата 11.7.2015, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2015

Репутация: нет
Всего: нет



Добрый день. Столкнулся с проблемой, которую не могу победить уже 2-ой день  smile 
На форме есть CheckListBox1, CheckListBox2 и CheckListBox3. Если отмечена хотя бы одна галочка, то кнопка Button1 становится активной, если нет, то, соответственно, неактивной. Добился того, что задумка работает только внутри одного из CheckListBox, а на остальные не распространяется. 
Поясню на примере:
В CheckListBox1 и CheckListBox2 стоит галка. Снимаем галку в CheckListBox2 и кнопка Button1 становится неактивной, хотя в CheckListBox1 галка отмечена, и кнопка должна быть активная smile
Вот мой код: 
Код

void __fastcall TMainForm::CheckListBoxClickCheck(TObject *Sender)
{
 for (int i = 0; i < dynamic_cast <TCheckListBox *>(Sender)->Items->Count; i++)
  {
   if (dynamic_cast <TCheckListBox *>(Sender)->Checked[i]) 
    { 
     Button1->Enabled = true;
    }
   else
    {
     Button1->Enabled = false;
    }      
  }
}

Если правильно понимаю, нужно проверять все CheckListBox'ы на отмеченные галки, но как это правильно сделать?
PM MAIL   Вверх
volatile
Дата 11.7.2015, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(SandiK @  11.7.2015,  02:04 Найти цитируемый пост)
Если отмечена хотя бы одна галочка, то кнопка Button1 становится активной

SandiK, чисто логика у вас хромает

Цитата(SandiK @  11.7.2015,  02:04 Найти цитируемый пост)

 for (int i = 0; i < dynamic_cast <TCheckListBox *>(Sender)->Items->Count; i++)
  {
   if (dynamic_cast <TCheckListBox *>(Sender)->Checked[i])
    {
     Button1->Enabled = true;
     return;
    }
//    else
//     {
//       Button1->Enabled = false;
//     }

  }
  Button1->Enabled = false;




PM MAIL   Вверх
SandiK
Дата 11.7.2015, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2015

Репутация: нет
Всего: нет



Представленный мной выше код работает. Без всяких изменений) но он не затрагивает другие CheckListBox'ы.
PM MAIL   Вверх
volatile
Дата 11.7.2015, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



SandiK, вы исправленный вариант пробовали?

если работает не так, то еще раз, внятно. 
1.Что должно быть.
2.Что работает не так

PM MAIL   Вверх
SandiK
Дата 11.7.2015, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2015

Репутация: нет
Всего: нет



1. На форме есть CheckListBox1, CheckListBox2 и CheckListBox3 (а возможно и больше будет в итоге). Если отмечена хотя бы одна галочка одного из CheckListBox, то кнопка Button1 становится активной, если нет, то, соответственно, неактивной. 

2. Пример: CheckListBox1, CheckListBox2 и CheckListBox3 отмечены галочками. Снимаем галку в CheckListBox2 и кнопка Button1 становится неактивной, хотя в CheckListBox1 и CheckListBox3 галки отмечены, и кнопка должна быть активная. То есть должна производиться проверка по всем CheckListBox на наличие отмеченных в них Items. И если при проверке хоть где-то стоит отметка, то кнопка не станет неактивной.
PM MAIL   Вверх
volatile
Дата 11.7.2015, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



SandiK
Цитата(volatile @  11.7.2015,  15:01 Найти цитируемый пост)
SandiK, вы исправленный вариант пробовали?


PM MAIL   Вверх
SandiK
Дата 11.7.2015, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2015

Репутация: нет
Всего: нет



Цитата(volatile @ 11.7.2015,  15:26)
SandiK
Цитата(volatile @  11.7.2015,  15:01 Найти цитируемый пост)
SandiK, вы исправленный вариант пробовали?

Да, не срабатывает.
PM MAIL   Вверх
volatile
Дата 11.7.2015, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(SandiK @  11.7.2015,  02:04 Найти цитируемый пост)
if ((dynamic_cast <TCheckListBox *>(Sender))->Checked[i]) 

здессь еще скобки нужны
PM MAIL   Вверх
xvr
Дата 13.7.2015, 16:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Сделайте 1 функцию, которая быдет проверять все 3 CheckListBox'а и вызывайте ее из обработчика всех 3х CheckListBox'ов
Код

bool is_some_checked(TCheckListBox* clb)
{
 for(int i=0;i<clb->Items->Count;++i)
  if (clb->Checked[i]) return true;
 return false;
}

void __fastcall TMainForm::CheckListBoxClickCheck(TObject *)
{
 Button1->Enabled = is_some_checked(CheckListBox1) || is_some_checked(CheckListBox2) || is_some_checked(CheckListBox3);
}


PM MAIL   Вверх
SandiK
Дата 17.7.2015, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.6.2015

Репутация: нет
Всего: нет



Цитата(xvr @ 13.7.2015,  16:29)
Сделайте 1 функцию, которая быдет проверять все 3 CheckListBox'а и вызывайте ее из обработчика всех 3х CheckListBox'ов
Код

bool is_some_checked(TCheckListBox* clb)
{
 for(int i=0;i<clb->Items->Count;++i)
  if (clb->Checked[i]) return true;
 return false;
}

void __fastcall TMainForm::CheckListBoxClickCheck(TObject *)
{
 Button1->Enabled = is_some_checked(CheckListBox1) || is_some_checked(CheckListBox2) || is_some_checked(CheckListBox3);
}


 smile Отлично работает! Спасибо!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0801 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.