Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 65

ListBox. Удаление объекта со сдвигом индексов всех элементов массива и самих строчек

16.01.2016, 17:05. Показов 1451. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Спасибо всем, кто откликается на мои "не умные вопросы" =) Ибо понять меня иногда бывает тяжело - знаю.

Поясню всю суть... У меня есть листбокс. При создании нового элемента в ListBox в мой массив данных загружается полно разных данных об этом выбранном элементе листбокса. Данные можно менять. Там есть и текст и целые числа и буулы. И т.д.

Есть (пока еще без кода) кнопка удалить...

Мне нужно. Чтобы при нажатии на кнопку "Удалить". Выделенная строчка по своему индексу удалялась.
Например я удаляю строчку с индексом (1). И все строчки ниже поднялись на строчку вверх изменив свой индекс на -1. со своими данными в массиве данных. Данные в массиве, тоже, должны перезаписаться для элемента с индексом на -1

До нажатия кнопки удаления:
1) (0) День рождения друга 1 (int day[0], month[0], year[0], hour[0], min[0]; bool galka_napominaniya[0];)
2) (1) день рождения друга 2 (int day[1], month[1], year[1], hour[1], min[1]; bool galka_napominaniya[1];)
3) (2) день рождения друга 3 (int day[2], month[2], year[2], hour[2], min[2]; bool galka_napominaniya[2];)

После нажатия кнопки удаления:
1) (0) День рождения друга 1 (int day[0], month[0], year[0], hour[0], min[0]; bool galka_napominaniya[0];)
2) (1) день рождения друга 3 (int day[1], month[1], year[1], hour[1], min[1]; bool galka_napominaniya[1];)


К каждой строчки привязаны данные (день, месяц, год, напомнить заранее (бул 1 или 0) - галка, часы и минуты) в глобальном массиве данных).


И еще, кое-что меня тут волнует. Если я буду удалять последний элемент списка. Как тут будет происходить перерасчет данных в массиве, если я все настрою на -1. Тут не будет ошибки?

В заключении. Я, примерно, предполагаю как это сделать. Но... не хочу рисковать и тратить кучу времени на перепроверку своих предположений, если среди вас есть те, кто смогут мне сразу сказать как надо.

Спасибо, заранее, всем кто посодействует.

Добавлено через 2 часа 15 минут
Спасибо, всем кто проявил интерес к моему вопросу.
Я, к сожалению не дождался и попробовал оправдать свои догадки. Они подтвердились. Проблема решена. Всем спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2016, 17:05
Ответы с готовыми решениями:

Удаление элементов из listbox без сдвига индексов
Реально ли сделать? Все, что я пробовал (через RemoveAt) сдвигает индексы после удаления. То есть после удаления элемента с нулевым...

Получение и вывод всех индексов массива в listbox
Доброй ночи,форум. Появилась очередная проблема. Парсим данные по ссылке и получаем steamid. Их в наличии 7.Как вывести все 7...

Для каждой из матриц вычислить суммы элементов,у которых суммы индексов совпадают со значениями самих элементов
Даны целочисленные матрицы А(4,4),В(4,4). Для каждой из матриц вычислить суммы элементов,у которых суммы индексов совпадают со значениями...

5
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
17.01.2016, 15:51
Только 1 вопрос. Зачем такие сложности c массивами и поиском элементов если можно использовать базы данных?
0
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 10
19.03.2016, 15:40
Салют. Очень нужна помощь.
Есть программа с минимальным набором функций, задача которой просто загружать и отображать данные каталогизированные вручную.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  TStringList *data_list;
  data_list = new TStringList;
  data_list->LoadFromFile("data/data_cinema.txt");
  AnsiString item = data_list->Strings[ListBox1->ItemIndex];
  String s1,s2,s3,s4,s5,s6;
  s1 = strtok(item.c_str(),"|");
  s2 = strtok(NULL, "|");
  s3 = strtok(NULL, "|");
  s4 = strtok(NULL, "|");
  s5 = strtok(NULL, "|");
  s6 = strtok(NULL, "|");
  delete data_list;
  Label1->Caption = s1;
  Label4->Caption = "Год: " + s2;
  Label3->Caption = "Режиссер: " + s4;
  Label5->Caption = "Жанр: " + s3;
  AnsiString f_img = "gfx/" + s5 + ".jpg";
  if (FileExists(f_img)) Image1->Picture->LoadFromFile(f_img); else Image1->Picture = NULL;
  RichEdit1->Text = s6;
Это в общем-то и всё.

Теперь мне хотелось бы реализовать следующую функцию. Представим теоретически, что есть еще и s7, которая будет означать оценку по пятибалльной шкале. Будет содержать в себе только одно число и вполне себе конвертироваться в int при желании.
Как сделать так, чтобы при, например, галочке на чекбоксе из ЛистБокса и СтрингЛиста удалялись все строки, в которых s7 < 4. В ЛистБоксе со сдвигом вверх, конечно.

TStringList содержит в себе кучу параметров вида "Название|Год|Жанр|Режиссер|имя_обложки| Аннотация".
ListBox1 же грузит по сути тот же список, но уже из другого файла, где хранятся только названия, но в том же порядке.

Как бы это дело провернуть? По возможности без серьезных изменений - программист из меня никакущий. БД, пожалуйста, не предлагать, я в них не шарю.
Выручите, пожалуйста.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
21.03.2016, 13:29
Цитата Сообщение от Maxim_W Посмотреть сообщение
ListBox1 же грузит по сути тот же список, но уже из другого файла, где хранятся только названия, но в том же порядке.
Зачем нужны здесь два файла с дублирующейся информацией?

Лучше выложи проект и файлы данных, чтобы люди могли в них с минимальными трудозатратами поковыряться, так дело быстрее пойдет)
0
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 10
22.03.2016, 18:40
Файла было два потому как отсутствие знаний замещаю кривыми костылями.
От второго все же сумел избавиться, но теперь у меня вообще полный абзац: куча СтрингЛистов.
Может, кто-нибудь потыкает носом, что и где я делаю неправильно, с пояснениями? А я, наверняка, неправильно делаю многое.
Основной функционал то в норме. Существенная проблема пока одна: при вызове контекстного меню на поле с режиссером в листбокс забиваются все его фильмы, но основной стринглист не хочет никак с ним правильно взаимодействовать. Либо данные не заполняются, либо еще что-нибудь.
Архив прилагаю. Пишу в Borland C++ 2006. Интересует пока только происходящее на первой форме. Все, что не работает на остальных трех, не работает потому как я туда еще не добрался.
Заранее спасибо.
Вложения
Тип файла: 7z cineman.7z (354.1 Кб, 2 просмотров)
0
0 / 0 / 0
Регистрация: 19.03.2016
Сообщений: 10
25.03.2016, 12:48
Спасибо всем никому, кто прочитал это сообщение и откликнулся, я уже справился сам. =D
Для тех, кто найдет это сообщение спустя пять лет: проблема была в функции strtok, которая рубила строку и все другие строки, в которые я пытался строку бэкапнуть, я сделал костыль типа такого str2 = SubString(str, str.Length) И потом использовал уже str2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2016, 12:48
Помогаю со студенческими работами здесь

Найти произведение всех положительных четных элементов массива и сумму их индексов
одномерный массив, массив вводится в ячейки с помощью цикла For .. Next. Ввести целочисленный массив из N элементов в первый столбец...

Удаление четных элементов массива,больших среднего арифметического всех элементов массива
Доброго времени суток! Помогите пожалуйста) Вот задание:Из массива удалить четные элементы, имеющие значение больше среднего...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru