Форум программистов, компьютерный форум, киберфорум
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. Показов 1341. Ответов 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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru