|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
удаление индексов массива
как удалить индекс массива так чтоб стало на 1 индекс меньше а номера индексов были по порядку?
Код:
i:=ListViewRashod.itemindex; ListViewRashod.Items.Delete(i); ItemList[i].AllDateArray:=0; ItemList[i].Statya:=''; ItemList[i].Summa:=0; ItemList[i].skidka:=0; ItemList[i].schet:=''; ItemList[i].val:=''; ItemList[i].com:=''; setLength(ItemList,i-1); --------------------------- Financialadvisor --------------------------- Range check error. --------------------------- ОК --------------------------- |
#2
|
||||
|
||||
Скорее всего у тебя i за пределами длины ItemList
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
Цитата:
--------------------------- Financialadvisor --------------------------- Access violation at address 0047A1E7 in module 'FinancialAdvisor.exe'. Read of address 00000024. --------------------------- ОК --------------------------- Код:
i:=ListViewRashod.itemindex; //индексу i присваиваеться выделенная строка ListViewRashod ListViewRashod.Items.Delete(i-1); ItemList[i].AllDateArray:=0; ItemList[i].Statya:=''; ItemList[i].Summa:=0; ItemList[i].skidka:=0; ItemList[i].schet:=''; ItemList[i].val:=''; ItemList[i].com:=''; setLength(ItemList,i-1); |
#4
|
||||
|
||||
Я логики работы понять не могу:
1. Получили индекс выделенной строки в визуальном объекте. 2. Удалили предыдущую строку в визуальном обхекте (если выделена первая строка - весело упали) 3. Некий невизуальный объект (скорее всего динамический массив записей) инициализируется по индексу визуального из п.1. Если длина массива (если это конечно массив, а все говорит об этом) меньше чем i+1 то опять же весело упали. 4. Устанавливаем длину массива на 1 меньшую чем полученный в п.1 индекс. Это вообще не понятно зачем, предыдущая инициализация (п.3) тогда вообще теряет смысл, ибо элемент этот остаётся "за бортом" причем не просто "за бортом", а уверенно так, ибо его индекс после операции по изменению длины стал бы Hihg(ItemList)+2. Короче код очень труден для понимания. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
Цитата:
а на счет пункта 4 то я его взял на примере кода Код:
i := Length(ItemList); //Узнаем сколько осталось строк в массиве SetLength(ItemList, i + 1); //создается новая строка в массиве Код:
i := Length(ItemList); //Узнаем сколько осталось строк в массиве SetLength(ItemList, i - 1); //создается новая строка в массиве |
#6
|
||||
|
||||
дык i у тебя не общая длина, а индек текущего элемента
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |