Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73

Алгоритм И CheckListBox

26.07.2012, 12:53. Показов 1367. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уже 3 часа ломаю голову, не могу решить задачу.
Есть три CheckListBox в них присутствуют данные которые нужно вначале выделить а потом по нажатие кнопки сравнить с таблицей StringGrid1 и записать только те данные, которые в соответствии выделены в CheckListBox1,2,3 в таблицу StringGrid2.
Проблема заключается в том, что CheckListBox1,2,3 имею разные размеры и организовать поиск по соответствию в вложенном цикле не получается.
Пример мучений
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TFrame3::BitBtn1Click(TObject *Sender)
{
int i, j, k1=1;
    for ( i = 0; i <= CheckListBox1->Items->Count-1; i++) {
    if (CheckListBox1->Checked[i]){
     for (j = 1; j <= icout; j++) {
      if (CheckListBox1->Items->Strings[i] == StringGrid1->Cells[0][j]) {
         StringGrid2->Cells[0][k1]=StringGrid1->Cells[0][j];
      k1++;
      }
     }
    }
 }
 
}
это тока для одного CheckListBox и то не получатся в таблицу StringGrid2 выводятся всегда тока 4 элемента и тока те которые были выбраны первым. хотя в таблице у меня очень много.
Миниатюры
Алгоритм И CheckListBox  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2012, 12:53
Ответы с готовыми решениями:

Отмеченные строки ChecklistBox'a вывести в другой ChecklistBox
Собственно вопрос в заголовке. Код по сути написан: void __fastcall TForm1::CheckListBox1ClickCheck(TObject *Sender) { int i; ...

CheckListBox аналог делфийского и CheckState для 1го CheckBox в CheckListBox
Здравствуйте. 1. Проблема в том что в c# CheckListBox не похож на делфийский. Например нельзя получить индекс элемента где была...

CheckListBox
В CheckListBox при выборе какого-либо элемента строка автоматически подсвечивается голубым. Ну по умолчанию так. При помощи Canvas,...

7
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
26.07.2012, 13:13  [ТС]
Нашёл в чем ошибка, она было банальная в StringGrid2 количество строк = 4 вот я жрал над собой
0
26.07.2012, 13:37

Не по теме:

Цитата Сообщение от V.V.P.Net Посмотреть сообщение
жрал над собой
:jokingly:

0
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
26.07.2012, 14:23  [ТС]

Не по теме:

Цитата Сообщение от Drygba Посмотреть сообщение

Не по теме:


:jokingly:

там буквы перепутаны =) такое иногда случается =)



Добавлено через 40 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TFrame3::BitBtn1Click(TObject *Sender)
{
int i,i1,i2, j, k1=1;
 
    for ( i = 0; i <= CheckListBox1->Items->Count-1; i++) {
     for (i1 = 0; i1 < CheckListBox2->Items->Count-1; i1++) {
      for (i2 = 0; i2 < CheckListBox3->Items->Count-1; i2++) {
        if ((CheckListBox1->Checked[i])&&(CheckListBox2->Checked[i1])
        &&(CheckListBox3->Checked[i2])){
            for (j = 1; j <= icout; j++) {
      if ((CheckListBox1->Items->Strings[i] == StringGrid1->Cells[0][j])&&
      (CheckListBox2->Items->Strings[i1] == StringGrid1->Cells[1][j])&&
      (CheckListBox3->Items->Strings[i2] == StringGrid1->Cells[2][j])) {
         StringGrid2->Cells[0][k1]=StringGrid1->Cells[0][j];
         StringGrid2->Cells[1][k1]=StringGrid1->Cells[1][j];
         StringGrid2->Cells[2][k1]=StringGrid1->Cells[2][j];
      k1++;
      }
     }
    }
   }
  }
 }//Здесь циклы закончились
 StringGrid2->RowCount = k1+1;
}
где ошибка? выделаю нужные элементы в чекбоксах, а проход по циклам не идёт....
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
26.07.2012, 14:47
А что, вот так сделать - совсем нельзя (sgSource - откуда берем данные, sgDest - куда переносим, а cb1 .. cb3 - те самые три чеклистбокса):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int ix = sgDest->FixedRows;
    for(int i = sgSource->FixedRows; i < sgSource->RowCount; i++)
    {
        bool ok = true;
        for(int j = 0; j < 3; j++)
        {
            TCheckListBox *cb = dynamic_cast<TCheckListBox*>(FindComponent("cb" + IntToStr(j+1)));
            ok &= cb->Checked[cb->Items->IndexOf(sgSource->Cells[j][i])];
        }
 
        if(ok)
        {
            sgDest->Rows[ix++]->Assign(sgSource->Rows[i]);
        }
    }
? Добавляй еще хоть 10 листбоксов - в коде изменится одно-единственное число.
1
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
26.07.2012, 15:13  [ТС]
Я что-то не чего не понял в вашем коде, не явно, что происходит там. Поэтому поменяв sgSource и sgDest на свои тупо copy/paste, при нажатии на кнопку получил
Миниатюры
Алгоритм И CheckListBox  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
26.07.2012, 15:54
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Тупо Copy+Paste не надо, ты наверняка забыл поменять "cb" на свои "CheckListBox". Добавил проверку на пустоту очередной строки первого грида:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    int ix = sgDest->FixedRows;
    for(int i = sgSource->FixedRows; i < sgSource->RowCount; i++)
    {
        if(!sgSource->Cells[0][i].IsEmpty())
        {
            bool ok = true;
            for(int j = 0; j < 3; j++)
            {
                TCheckListBox *cb = dynamic_cast<TCheckListBox*>(FindComponent("cb" + IntToStr(j+1)));
                ok &= cb->Checked[cb->Items->IndexOf(sgSource->Cells[j][i])];
 
            }
 
            if(ok)
            {
                sgDest->Rows[ix++]->Assign(sgSource->Rows[i]);
            }
        }
    }
, результат - на скрине, вылетов не обнаружено.
Миниатюры
Алгоритм И CheckListBox  
1
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
26.07.2012, 16:22  [ТС]
Спасибо большое, да работает на первый взгляд, "cb" забыл. вообще я подумал что это какаято переменная хранящая в себе то самое "CheckListBox". С dynamic_cast я не работал и не знаю, что это такое. а проверка кстате нужна. Ещё теперь осталось sgDest отсортировать по 4 столбцу (по возрастанию)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2012, 16:22
Помогаю со студенческими работами здесь

CheckListBox
Можно ли в CheckListBox при выполнении программы менять местами строчки (опускать вниз и поднимать вверх)?

CheckListBox
В CheckListBox загрузил список активных окон. Как сделать, чтобы при снятии галочки это окно скрывалось, и наоборот отображалось если её...

checklistbox
Есть checklistbox2.items.add(DBGrid1.DataSource.DataSet.FieldByName('Фамилия').AsString); Как вместо одного значения одного столбца...

checklistbox
Ухх, долго не мог войти после регистрации:) Вобщем, помогите новичку в делфи пожалуйста. Пишу программу удаления временных файлов и...

CheckListBox
здравствуйте, не подскажите как сохранить информацию выбранную в CheckListBox в блокнот? для комбобокс я сохраняю так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru