Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Von fremder Form auf ListView zugreifen (https://www.delphipraxis.net/116326-von-fremder-form-auf-listview-zugreifen.html)

citybreaker 26. Jun 2008 20:01


Von fremder Form auf ListView zugreifen
 
Hallo!

Wieder einmal macht es Delphi mir nicht leicht. Wenn ich von einer fremden Form ein ListView leeren will
passiert einfach nichts.
Möchte ich den Text vom ersten Item in einem Label anzeigen bekomme ich folgende Fehlermeldung:
Zitat:

Zugriffsverletzung bei Adresse 004AE566 in Modul 'projekt1.exe'. Lesen von Adresse 00000024
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Label1.Caption := Form1.ListView1.Items[0].Caption;
  Form1.ListView1.Clear;
end;

marabu 26. Jun 2008 20:12

Re: Von fremder Form auf ListView zugreifen
 
Hallo Alexander,

möglich ist es, aber die feine Art ist es nicht, wenn du auf diese Art auf UI-Controls zugreifst. Bei deinem Beispielcode musst du nur darauf achten, dass die andere Form (Form1) auch bereits instanziert wurde. Vermutlich hast du sie aus der Liste der automatisch erstellten Formulare heraus genommen.

Grüße vom marabu

SirThornberry 26. Jun 2008 20:52

Re: Von fremder Form auf ListView zugreifen
 
Hast du mal geschaut welchen Wert Form1 hat? Die Adresse deutet darauf hinn das du auf ein Object zugreifst welches nil ist

oki 26. Jun 2008 21:03

Re: Von fremder Form auf ListView zugreifen
 
Ich denke mal das ist nicht Delphi :mrgreen:

Entweder es trifft das zu was meine Vorredner gesagt habe, oder du hast vielleicht auch den Button zwei mal geklickt. Nach dem Zugriff löscht du ja das ListView. Danach ist Items[0] nil.

Gruß oki

citybreaker 27. Jun 2008 14:16

Re: Von fremder Form auf ListView zugreifen
 
Habe definitiv nur einmal auf den Button geklickt. Sobald ich die ganze aktion
in der eigenen Form starte funktioniert es.

Wobei kann es passieren, dass mein Object nil wird bzw. womit verhinder ich es?

DeddyH 27. Jun 2008 14:22

Re: Von fremder Form auf ListView zugreifen
 
Frag erst einmal ab, ob überhaupt Items vorhanden sind.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  if Form1.ListView1.Items.Count > 0 then
    begin
      Label1.Caption := Form1.ListView1.Items[0].Caption;
      Form1.ListView1.Clear;
    end;
end;

oki 27. Jun 2008 14:23

Re: Von fremder Form auf ListView zugreifen
 
Hi,

die Frage ist, was nil ist. Es kann sowohl die Form wie auch das Item sein. Die Form ist nil, wenn du wie schon erwähnt das Formular nicht automatisch erstellt wird. Da deine Form aber Form1 heißt, nehme ich mal an, dass das dein Hauptformular ist.

Starte einfach mal das Programm aus der IDE und setze vorher einen Breakpoint in die erste Zeile deiner Ereignisbehandlung für Button Klick. Drücke auf den Button und die IDE geht in den Vordergrund. Dann kannst du mit der Maus über Form1 und den Eintrag Caption gehen. Schau mal, was der Debugger dazu sagt.

Gruß Oki

PS. Mann, wird zeit, dass wir ein Smiley für roten Kasten bekommen!

Apollonius 27. Jun 2008 14:27

Re: Von fremder Form auf ListView zugreifen
 
Form1 oder Form1.ListView1 können nicht nil sein, dafür ist die Fehleradresse viel zu niedrig.

oki 27. Jun 2008 14:36

Re: Von fremder Form auf ListView zugreifen
 
Na, wenn das so ist, dann kanns ja nur noch ein leeres ListView sein.

citybreaker 27. Jun 2008 14:38

Re: Von fremder Form auf ListView zugreifen
 
Der Fehler kommt tatsächlich nur, wenn ich ein 2 mal auf den Button klicke. (grad noch einmal ausprobiert)
Das liegt ja dann daran das ich die ListView geleert habe. Allerdings stehen weiterhin alle einträge in
der ListView. Wird die Komponente nicht aktualisiert oder was ist da bei der Anzeige los?

Edit

Vielleicht auch nicht leer, wenn ich nach dem leeren auf eins der Items da drinne klicke kann ich mir
die Caption und ItemIndex anzeigen lassen.

Versteh das grad alles nicht. -.-


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz