Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизКак перехватить ошибку? Найти похожие ветки
← →
Bad_B (2007-07-05 23:45) [0]
List Index out of bounds (...).
Необходимо сделать что бы когда она возникает выдавать свой message, (что мол последовательность действий нарушена)
ЗЫ. с этим не работал, поэтому укажите куда хоть копать
← →
turbouser © (2007-07-06 00:04) [1]Такая ошибка в нормальной программе в принципе не должна появляться.
Т.е. надо править код так, что бы небыло выходов за границы массива.
← →
{RASkov} © (2007-07-06 00:09) [2]
try
ShowMessage(ListBox1.Items[10000]);
except
On EStringListError do ShowMessage("Нет такого итема");
end;
или просто:try
ShowMessage(ListBox1.Items[10000]);
except
ShowMessage("Нет такого итема");
end;
??
Запускай из проводника... или если в делфи включена "Stop on Delphi Exception" то жмем Ок и сразу F9...
Ну и, как и замечено в [1], нужно следить за границами....
← →
MsGuns © (2007-07-06 00:09) [3]try .. except ShowMessage("ошибка однако"); end;
← →
Bad_B (2007-07-06 00:23) [4]Спасибо за подсказку))
Все-таки прийдется перекодить (не там ошибку видел оказывается), на будущее учту "ловушку".
ЗЫ. еще раз спс:)
← →
Германн © (2007-07-06 01:36) [5]
> Bad_B (05.07.07 23:45)
>
> List Index out of bounds (...).
> Необходимо сделать что бы когда она возникает выдавать свой
> message, (что мол последовательность действий нарушена)try
for i:=0 to ListBox1.Items.Count-1 do begin
if ListBox1.Items[i] "удовлетворяет некоему критерию" then ListBox1.Items.Delete(i);
end;
except
ShowMessage("Блин! Ну когда же ты поймёшь наконец, что НЕЛЬЗЯ удалять Айтемы в цикле for???");
end;
:-)
← →
{RASkov} © (2007-07-06 03:36) [6]> ShowMessage("Блин! Ну когда же ты поймёшь наконец, что НЕЛЬЗЯ удалять Айтемы в цикле for???");
Не увидит это сообщение :( Если конечно "удовлетворяет некоему критерию" не вызовет исключения....
Да и удалятся максимум половина итемов...
> что НЕЛЬЗЯ удалять Айтемы в цикле for
downto?
← →
Bad_B (2007-07-06 03:42) [7]Если интересно(мало ли)))), сделал так
.......
{делал для того чтобы потом записывать в ini-файл какие кнопки остались не нажаты, и пр., и пр.}
.......var
s,s1:string;
h,g,Nomer_Button:integer;
d:Tstringlist;
...........
g:=form1.ListBox1.Count;
.....
if g<=0 then showmessage("......")
else
begin
d:=TStringList.Create;
for h:=0 to ListBox1.Count-1 do
d.Add(form1.ListBox1.Items.Strings[h]);
d.Delete(Nomer_Button-1);
d.Insert(Nomer_Button-1,"0");
listbox1.Clear;
for h:=0 to d.Count-1 do
form1.ListBox1.Items.Add(d.Strings[h]);
d.Free;
end;
........
где Nomer_Button - это номер кнопки (с 1 начинается счет)
ЗЫ. думаю что всем понятен код, но на всякий случай -
замена на 0 того что хранится в form1.ListBox1.Items.Strings[h]
никак не изменяет количество ListBox1.Count, поэтому ошибочка исчезает)))
ЗЫЫ. извращение? да))) но для любителя, имхо, сойдет
← →
{RASkov} © (2007-07-06 03:59) [8]> [7] Bad_B (06.07.07 03:42)
Что к чему....
> думаю что всем понятен код
Зря ты так думаешь.... :)
> for h:=0 to ListBox1.Count-1 do
> d.Add(form1.ListBox1.Items.Strings[h]);
Все прощеd.Assign(form1.ListBox1.Items);
Тоже самое и потом, наоборот...
В итоге все свелось к 2-м строчкам :)form1.ListBox1.Items.Delete(Nomer_Button-1);
form1.ListBox1.Items.Insert(Nomer_Button-1,"0");
:)
Не ну я вообще фик его знает, может какой глубокий смысл есть в приведенном примере.... :)
> замена на 0 того что хранится в form1.ListBox1.Items.Strings[h]
> никак не изменяет количество ListBox1.Count
Ага :)
> извращение? да)))
Полнейшее :)
Даже....
> но для любителя, имхо, сойдет
... и не думай :)
← →
{RASkov} © (2007-07-06 04:01) [9]> В итоге все свелось к 2-м строчкам :)
> form1.ListBox1.Items.Delete(Nomer_Button-1);
> form1.ListBox1.Items.Insert(Nomer_Button-1,"0");
> :)
Даже к одной :)form1.ListBox1.Items[Nomer_Button-1]:="0";
:)
← →
{RASkov} © (2007-07-06 04:10) [10]В итоге вот весь твой код:
var
Nomer_Button: integer;
...........
if form1.ListBox1.Count<=0 then showmessage("......")
else form1.ListBox1.Items[Nomer_Button-1] := "0";
........
Пойдет? ;)
← →
{RASkov} © (2007-07-06 04:13) [11]Т.е. вот так
var
Nomer_Button: integer;
...........
Dec(Nomer_Button);
if (form1.ListBox1.Count<=0) or (Nomer_Button<0) or (Nomer_Button>=form1.ListBox1.Count) then showmessage("......")
else form1.ListBox1.Items[Nomer_Button] := "0";
........
:о)
← →
{RASkov} © (2007-07-06 04:21) [12]> form1.ListBox1.Count.... form1.ListBox1.Items[Nomer_Button] := "0";
Если этот код находиться в методе формы, то писать Form1 не нужно.... просто -ListBox1.Items[Nomer_Button] := "0";
> d.Add(form1.ListBox1.Items.Strings[h]);
....
> d.Strings[h]);
Так же свойство Strings не обязательно указывать, оно в TStrings по умолчанию... но это не важно....
← →
Bad_B (2007-07-06 04:22) [13]Да че то я перемудрил с кодом:)
> {RASkov} © (06.07.07 04:10) [10]
Лихо))) Спс за очередную подсказку (в 10 так сказать))))
ОФФ:
ЗЫ. Вот в очередной раз задумался: или начать-таки по плотнее изучать программирование (в частности Delphi), или забросить все это дело, и не позориться))))....
← →
{RASkov} © (2007-07-06 04:41) [14]> [13] Bad_B (06.07.07 04:22)
> или начать-таки по плотнее изучать программирование
А ты еще раз глянь на свой код в [7] и включи "думалку"...
Правда я тоже не сразу сообразил, из-за твоего "стильного форматирования" и "умных" имен переменных, что там к чему.
Но потом "постепенно начал вникать".... (мне аж самому смешно стало:)). Отсюда и столько постов последовало...:)
А вот над тем, чем задумался, подумай серьезно.
← →
Anatoly Podgoretsky © (2007-07-06 07:45) [15]> Германн (06.07.2007 01:36:05) [5]
Можно, но делать надо это правильно, а не красиво.
← →
Плохиш © (2007-07-06 11:46) [16]
> ShowMessage("Блин! Ну когда же ты поймёшь наконец, что
> НЕЛЬЗЯ удалять Айтемы в цикле for???");
Почему нельзя, можно, только идти надо с другой стороны :-D
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.049 c