![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AV при работе с TStringList [D7, WinXP]
Cobalt © (2008-07-29 13:22:00)
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
SynListCombo: TStringList;
begin
SynListCombo:= TStringList.Create;
SynListCombo.Sorted:=False;
for i:=0 to 29 do SynListCombo.Add(IntTostr(i));
SynListCombo.Add('ActDD');
//SynListEdit[29]:='29-ActDD'; //AV! Хотя строка уже существует!!!
SynListCombo.Add('ActMM');
SynListCombo.Add('ActYY');
ListBox1.Items.AddStrings(SynListCombo);
for i:=0 to 28 do ListBox1.Items.Add(IntTostr(i));
ListBox1.Items.Add('ActDD');
ListBox1.Items[29]:='29-ActDD'; // Строки даже нет еще!
ListBox1.Items.Add('ActMM');
ListBox1.Items.Add('ActYY');
end;
Если раскомментировать строку
SynListEdit[29]:='29-ActDD';
то возникает AV (независимо от существования строки)
а подобный код в ListBox никакой ошибки не вызывает.
Собственно задача - установить строки некоторых номеров в определенные значения, и для этого тащить целый визуальный контрол не хочется. (припомнив приснопамятное хранение значений в Edit1.Text)
Игорь Шевченко (2008-07-29 16:59:00) [21]кто нагляднее ?
> SynListCombo:= TStringList.Create;
> SynListCombo.Sorted:=False;
> for i:=0 to 29 do SynListCombo.Add(IntTostr(i));
> SynListCombo.Add('ActDD');
> //SynListEdit[29]:='29-ActDD'; //AV! Хотя строка уже существует!
> !!
> SynListCombo.Add('ActMM');
> SynListCombo.Add('ActYY');
или
SynListCombo:= TStringList.Create;
with SynListCombo do
begin
Sorted:=False;
for i:=0 to 29 do
Add(IntTostr(i));
Add('ActDD');
Add('ActMM');
Add('ActYY');
end;
Тын-Дын (2008-07-29 15:21:00) [22]
> Slym © (29.07.08 14:28) [11]
> Тын-Дын © (29.07.08 14:21) [10]
> Такую конструкцию стоит использовать только в полностью
> прозрачных и простых конструкциях
> куда уж проще - ничего кроме адд:
Зато наглядно.
Тын-Дын (2008-07-29 15:21:00) [23]В принципе да - покажет. Но увидеть можно только те поля, которые используются в with..end;
Тын-Дын (2008-07-29 15:18:00) [24]
> Игорь Шевченко © (29.07.08 14:28) [12]
>
> > Не стоит задумываться.
>
>
> стоит - TStringList.Sorted давно уже отлажен
Если толтько одна строчка - возможно.
> Во-ще-то, есть Watch List, а в данном случае и Debug Inspector.
А он покажет поля этого объекта?
Leonid Troyanovsky (2008-07-29 14:35:00) [25]
> Тын-Дын © (29.07.08 14:21) [10]
> прозрачных и простых конструкциях, не предполагающих отладки
> кода.
Во-ще-то, есть Watch List, а в данном случае и Debug Inspector.
--
Regards, LVT.
Игорь Шевченко (2008-07-29 14:28:00) [26]
> Не стоит задумываться.
стоит - TStringList.Sorted давно уже отлажен
Slym (2008-07-29 14:28:00) [27]Тын-Дын © (29.07.08 14:21) [10]
Такую конструкцию стоит использовать только в полностью прозрачных и простых конструкциях
куда уж проще - ничего кроме адд:
Cobalt (29.07.08 13:22)
for i:=0 to 29 do SynListCombo.Add(IntTostr(i));
SynListCombo.Add('ActDD');
SynListCombo.Add('ActMM');
SynListCombo.Add('ActYY');
ничего кроме адд
Тын-Дын (2008-07-29 14:21:00) [28]
> повод задуматься об использовании конструкции вида
> with SynListCombo do
> begin
> Sorted:=False;
> ...
> end;
Не стоит задумываться.
Такую конструкцию стоит использовать только в полностью прозрачных и простых конструкциях, не предполагающих отладки кода.
Slym (2008-07-29 13:58:00) [29]повод задуматься об использовании конструкции вида
with SynListCombo do
begin
Sorted:=False;
...
end;
Anatoly Podgoretsky (2008-07-29 13:48:00) [30]Не существует, AV бы не было.
Медвежонок Пятачок (2008-07-29 13:45:00) [31]может и существует, но там нет 29 элемента
Anatoly Podgoretsky (2008-07-29 13:44:00) [32]
> //SynListEdit[29]:='29-ActDD'; //AV! Хотя строка уже существует!
> !!
Строка существует, а вот SynListEdit нет
Cobalt (2008-07-29 13:43:00) [33]2 han_malign © (29.07.08 13:29) [2]
Блин, глаз замылился :(
Спасибо!
Palladin (2008-07-29 13:40:00) [34]просшу просчения, не то процитировал,
> //SynListEdit[29]:='29-ActDD'; //AV! Хотя строка уже существует!
вот это нужно было процитировать
Palladin (2008-07-29 13:37:00) [35]
> ListBox1.Items[29]:='29-ActDD'; // Строки даже нет еще!
ну правильно, нет этого пункта, и вполне логичный вопрос, на кой обращаешься к несуществующему пункту, при этом еще и ожидая какого то, отличного от ошибки, результата?
han_malign (2008-07-29 13:29:00) [36]
> ....SynList Combo.....
> //SynList Edit[29]:='29-ActDD'; //AV! Хотя строка уже существует!!!
???
tesseract (2008-07-29 13:26:00) [37]
> for i:=0 to 28 do ListBox1.Items.Add(IntTostr(i));
> ListBox1.Items.Add('ActDD');
> ListBox1.Items[29]:='29-ActDD'; // Строки даже нет еще!
>
Как нет ? 30 строк ты и добавил.