Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AV при работе с TStringList [D7, WinXP]


Страницы:   1 2

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 строк ты и добавил.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо