![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Access Violation
AIK © (2009-03-10 08:48:00)Здравствуйте Уважаемые.
Не могу понять принцип ошибки «обращения к запрещенной памяти» в данном случае:
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
Nom: String;
begin
BEGIN
nom:= ListView1.Items[ListView1.ItemIndex].Caption;
If nom='0' then
Button1.Enabled:= true else
Button1.Enabled:= false;
END;
end;
Код я уже подправил:
...
If ListView1.SelCount > 0 then
BEGIN
nom:= ListView1.Items[ListView1.ItemIndex].Caption;
...
Но почему первый вариант выдает ошибку? Ведь итемы ListView’a уже заранее созданы да и ошибка вылетает только со второго клика.
AIK (2009-03-10 11:15:00) [1]
> Palladin © (10.03.09 10:57) [22]
Ууу... теперь понял. Спасибо
Palladin (2009-03-10 10:57:00) [2]Объясняю на пальцах, еще раз. Событие OnItemSelect, как видно из справки, возбуждается в случае выделении элемента, а так же и при снятии отметки о выделении, что же произошло, нам рассказывает параметр Selected, если отметка была снята, как по твоему, в какие места будет указывать ListView1.Selected ? Правильно, туда где не светит солнце.
AIK (2009-03-10 10:42:00) [3]
> Palladin © (10.03.09 10:29) [20]
> В этом случае все вышесказаное мной справедливо.
Полностью с вами согласен, а можно спросить почему в данном случаи вылетает ошибка?
Palladin (2009-03-10 10:29:00) [4]В этом случае все вышесказаное мной справедливо.
AIK (2009-03-10 10:28:00) [5]
> Хм, а ты вообще о каких таких полях говоришь?
Строчки в у ListView'а
Palladin (2009-03-10 10:07:00) [6]Хм, а ты вообще о каких таких полях говоришь?
Palladin (2009-03-10 09:56:00) [7]я в шоке от тебя :) коллекция TListView.Items[]: TListItem- это что? фикция? так вот на событие TListView.OnSelectItem передается объектItem: TListItemиз этой коллекции... неужели это так трудно понять?
AIK (2009-03-10 09:53:00) [8]
> Palladin © (10.03.09 09:46) [15]
Нутоесть типа создал несколько полей и у каждого свой итем чтоли?
Palladin (2009-03-10 09:46:00) [9]
> вот я выбираю одно из полей ListView1 Item'у присваивается
> соответствующий номер поля
фантазии фантазии... они редко пересекаются с реальностю... Item'у ничего не присваивается, Item и есть тот Item который реально существует.... кажется я тебе доходчиво еще в [1] обяснил, что означает параметр selected... думани логически, что произойдет если selected будет false ?
> Может я опять туплю
"Может" - лишнее
AIK (2009-03-10 09:40:00) [10]
> ... ( пусть даже если ListView1.Selected.Caption )...
:)
korneley (2009-03-10 09:39:00) [11]
> Palladin © (10.03.09 09:33) [11]
>боюсь тебя разочаровать, но ItemIndex отнюдь не тот элемент
> который был выделен
Не, не разочаруешь. Я же не спорю. ;) Я по поводу откуда у автора AV нарисовалось :))) А уж то он там анализирует, не то, ему уже в [1] показали.
Да, автор, в [3] Selected запросто nil может оказаться. Будет AV номер два.
AIK (2009-03-10 09:38:00) [12]
> А чего не Button1.Enabled := nom = '0';?
Да хоть Button1.caption:='абвгд';
Меня интересовала суть ошибки
Может я опять туплю но вот я выбираю одно из полей ListView1 Item'у присваивается соответствующий номер поля и я вытаскиваю Caption из этого поляListView1.Items[ListView1.ItemIndex].Caption( пусть даже еслиListView1.Selected.Caption, а тут вылетает ошибка типа обращаюсь туда где ничего нет, всеголиш хотелось понять почему?
Palladin (2009-03-10 09:33:00) [13]
> korneley © (10.03.09 09:29) [9]
боюсь тебя разочаровать, но ItemIndex отнюдь не тот элемент который был выделен
Сергей М. (2009-03-10 09:30:00) [14]
> AIK © (10.03.09 09:26) [8]
> Это поле
"Поле" по-непорусски - это "Field".
Гдев объявлении формального параметра Item ты видишь слово "Field" ?
korneley (2009-03-10 09:29:00) [15]
> Palladin © (10.03.09 09:25) [7]
Дык, понятно... Ну хочет человек через... ItemIndex делать, пусть. Его проблемы. Но проверить-то индекс на валидность надо :)
AIK (2009-03-10 09:26:00) [16]
> > Так в ItemIndex он и передаетсяда что ты говоришь, это
> тебе приснилось сегодня? или откуда ты это узнал? убеждения?
>
Да я ступил :о)
> Item это что по твоему?
Это поле.
Palladin (2009-03-10 09:25:00) [17]
> korneley © (10.03.09 09:22) [6]
не только сначала, но и при уведомлении о снятии выделения
korneley (2009-03-10 09:22:00) [18]
> AIK © (10.03.09 09:07) [2]
> > нужный пункт тебе в параметрах передаетсяТак в ItemIndex
> он и передается
Ага, только сначала в ИтемИндекс-1приходит, на которое ты никаких проверок не поставил.
> If nom='0' then Button1.Enabled:= true else Button1.
> Enabled:= false;
А чего неButton1.Enabled := nom = '0';?
brother (2009-03-10 09:21:00) [19]> procedure TForm1.ListView1SelectItem(Sender: TObject; Item:
> TListItem;
> Selected: Boolean);
это про [1]
Palladin (2009-03-10 09:13:00) [20]
> Так в ItemIndex он и передается
да что ты говоришь, это тебе приснилось сегодня? или откуда ты это узнал? убеждения?
> AIK © (10.03.09 09:11) [3]
я с тебя фигею. ты на параметры события вообще смотрел хоть раз в жизни? Item это что по твоему?