Создал прогу Lazarus 2.0.12
На форме кнопка при ее нажатии клавиши выполняется функция (листинг функции внизу) случайного выбора 1 и 0 (страна или ее столица) если случайно выбран 1, то все работает, но если выбран 0, то возникает ошибка List index exceeds bounds (0).
форумчане подскажте в чем причина?
/////////////////////////////////////////////////////////////////////////////////
function TForm5.str_sto(f:string):string;//функция случайно выбранная страна или столица stringgrid1 form4
// c:integer;//глобальная переменная страна/столица}
{
для проверки
в поле Edit28 выводится страна или столица
в поле Edit29 выводится выбранное значение 1 или 0
}
begin
F:='1';
form4.Edit29.Text:='';
randomize;
c:=random(2);
form4.Edit29.Text:=inttostr(c);
if c=0 then form4.Edit28.Text:='страна';
if c=1 then form4.Edit28.Text:='столица';
if c=0 then result:='страна';
if c=1 then result:='столица';
end;
/////////////////////////////////////////////////////////////////////////////////
Ошибка
Модератор: Модераторы
Можно предположить(без хрустального шара, увы, не обойтись), что где-то в этом самом stringgrid1 form4cot писал(а):На форме кнопка при ее нажатии клавиши выполняется функция (листинг функции внизу) случайного выбора 1 и 0 (страна или ее столица) если случайно выбран 1, то все работает, но если выбран 0, то возникает ошибка List index exceeds bounds (0).
форумчане подскажте в чем причина?
/////////////////////////////////////////////////////////////////////////////////
function TForm5.str_sto(f:string):string;//функция случайно выбранная страна или столица stringgrid1 form4
// c:integer;//глобальная переменная страна/столица}
stringgrid1 form4 - это комментарий для функции, столбцы из таблицы которые выбирает функция, я их вывел в поле Edit28
В приведённом отрывке кода не видно ничего такого, что могло бы сгенерировать подобную ошибку, так что, увы, нужно больше кода, желательно компилируемый пример.
Во время появления ошибки вызываем "Стек вызовов" и идем смотрим кто как вызывал. И по шагам повторяем, сверяя показания переменных. Но раз ошибка говорит что список за границей, значит надо смотреть там, где есть списки.
Cудя по всему где-то есть пустой список и при обращении к его первому элементу (т.е. с индексом 0) всё вылетает.
Это может быть какой-нибудь графический элемент типа комбобокса, который забыли заполнить итемами.
Вообще убил бы за столь информативное сообщение об ошибке - что индекс равен нулю написали, а имя списка написать забыли. А если их несколько десятков или сотен??? гадай теперь.
Добавлено спустя 5 часов 45 минут 55 секунд:
и еще одна не то чтобы ошибка, но неправильность
randomize
должен вызываться один раз в начале программы, а не при каждом нажатии кнопки. соответственно ему место в обработчике onCreate или onShow
Добавлено спустя 4 минуты 32 секунды:
и еще: у функции есть параметр f. непонятно зачем, но есть.
он не обьявлен, как var, но ему что-то присваивается. это как?
Это может быть какой-нибудь графический элемент типа комбобокса, который забыли заполнить итемами.
Вообще убил бы за столь информативное сообщение об ошибке - что индекс равен нулю написали, а имя списка написать забыли. А если их несколько десятков или сотен??? гадай теперь.
Добавлено спустя 5 часов 45 минут 55 секунд:
и еще одна не то чтобы ошибка, но неправильность
randomize
должен вызываться один раз в начале программы, а не при каждом нажатии кнопки. соответственно ему место в обработчике onCreate или onShow
Добавлено спустя 4 минуты 32 секунды:
и еще: у функции есть параметр f. непонятно зачем, но есть.
он не обьявлен, как var, но ему что-то присваивается. это как?
