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