![]() |
Fehler bei Selektion (beim zweiten mal)
Hallo!
In meinem Programm habe ich ein Listview "LV_Produkte". In diesem Listview möchte ich eine Zeile Auswählen und diese in einer Variable speichern. Wenn ich das erste mal auf ein Element klicke funktioniert es auch, klicke ich gleich drauf noch einmal ein Element an, so kommt eine Fehlermeldung: Erste Gelegenheit für Exception bei $76D4FBAE. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004A766D in Modul 'Project4.exe'. Lesen von Adresse 00000024'. Prozess Project4.exe (5632)
Delphi-Quellcode:
ich hoffe mir kann jemand helfen!
procedure TForm1.LV_ProdukteSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean); begin selected_Produkt:= strtoint(LV_Produkte.Selected.caption); //hier kommt der Fehler showmessage(inttostr(selected_Produkt)); Zeit_laden(); end; LG Daniela |
Re: Fehler bei Selektion (beim zweiten mal)
Ist dir mal aufgefallen, wozu der Parameter Item da sein soll?
Wenn ja, warum verwendest du dann LV_Produkte.Selected? Diese Methode wird auch beim Deselektieren aufgerufen und nun rate mal, was .Selected in diesem Fall sein wird? Zitat:
Mein Tipp: werte mal die/alle Parameter aus, anstatt externe Dinge zu nutzen |
Re: Fehler bei Selektion (beim zweiten mal)
Und abgesehen davon: Wenn du einen Haltepunkt auf die erste Zeile setzt, dann sollte dir ebenfalls beim Darüberhalten der Maus über LV_Produkte.Selected auffallen, dass das nil ist. ;-)
Der Debugger ist schon wichtig, auch wenn es anfangs etwas irritierend sein mag damit zu arbeiten. |
Re: Fehler bei Selektion (beim zweiten mal)
Ich verwende LV_Produkte.Selected, weil ich möchte das die Procedure "Zeit_laden" nur dann ausgelöst wird, wenn ich wirklich ein Item makiert habe.
Und so weit ich weis ist "LV_Produkte.selected.item" die einzige Möglichkeit dazu. LG |
Re: Fehler bei Selektion (beim zweiten mal)
aber wenn LV_Produkte.selected.item wirklich nil ist, warum funktioniert es dann beim ersten mal?
|
Re: Fehler bei Selektion (beim zweiten mal)
Ich habe es jetzt folgend gelöst!
Finde die Lösung aber nicht besonder schön!
Delphi-Quellcode:
LG
procedure TForm1.LV_ProdukteClick(Sender: TObject);
begin if LV_Produkte.selected.caption = null then begin end else begin selected_Produkt:= strtoint(LV_Produkte.Selected.caption); showmessage(inttostr(selected_Produkt)); Zeit_laden(); end; end; |
Re: Fehler bei Selektion (beim zweiten mal)
Delphi-Quellcode:
entspricht
if ... = null then begin
end else begin ... end;
Delphi-Quellcode:
Wieso eigentlich NULL?
if ... <> null then begin
... end; NULL ist nicht NIL. Und wurde nicht gesagt .Selected ist schon nil ... tja, dann kann .Selected.Irgendwas nicht funktionieren, denn genau an dieser Stelle tritt ja die Exception schon auf. PS: Klicke mal bei deinem "if LV_Produkte.selected.caption = null then"-Code neben die Items, in einen freien ListView-Bereich.
Delphi-Quellcode:
Aber wie gesagt ... rate mal, wofür Parameter eigentlich gut sein sollen:
if LV_Produkte.selected <> nil then begin
// oder besser noch if Assigned(LV_Produkte.selected) then
Delphi-Quellcode:
procedure TForm1.LV_ProdukteSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
begin if Selected then begin //selected_Produkt := strtoint(TListView(Sender).Selected.Caption); selected_Produkt := strtoint(Item.Caption); showmessage(inttostr(selected_Produkt)); Zeit_laden(); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz