Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1183447724
Fidel
2007-07-03 11:28
2007.07.29
АОН - определитель номера


15-1183467755
Сергей М.
2007-07-03 17:02
2007.07.29
"Непонятка" в FastReport 3.x


15-1183312891
IPE
2007-07-01 22:01
2007.07.29
Apache 2


2-1183543312
deras
2007-07-04 14:01
2007.07.29
Как защитить прогу?


2-1183363164
Ksion_tm
2007-07-02 11:59
2007.07.29
Скорость шпинделя CDROMa





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский