![]() |
FindData beim Listview
Hallo mal wieder. Irgendwie habe ich ein kleines Problem mit FindData... Kann mir irgendjemand hier sagen, was ich falsch mache?
Delphi-Quellcode:
Es lassen sich im moment unendlich viele Benutzer zur Liste hinzufügen... Verstehe irgendwie nicht ganz wieso. Hoffe mir kann jemand erklären wieso.function TBenutzerverwaltung.Fuege_Benutzer_Zur_Liste_Hinzu( Neuer_Benutzer : String; Benutzerlistview : Tlistview) : String; var Listitem : Tlistitem; newBenutzerverwaltung: TBenutzerverwaltung; Index : Integer; // Für das Setzen des Itemindex begin newBenutzerverwaltung := TBenutzerverwaltung.Create; // Neues Klassenobjekt erstellen newBenutzerverwaltung.FBenutzername := copy(Neuer_Benutzer,5,length(Neuer_Benutzer)); // Benutzernamen in die Variable kopieren newBenutzerverwaltung.FBenutzerNummer := StrToInt(copy(Neuer_Benutzer,1,4)); // UIN kopieren newBenutzerverwaltung.FBenutzerFenster_Offen := 0; // Benutzerfenster ist am Anfang stets geschlossen newBenutzerverwaltung.FBenutzerInfoFenster_Offen := 0; // Benutzerinfofenster ebenfalls // Prüfen, ob der Eintrag bereits in der Listview existiert Listitem := Benutzerlistview.FindData(0,TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer),True,True); if Listitem <> nil then // Eintrag noch nicht vorhanden begin exit; end else begin // Eintrag bereits vorhanden Index := Benutzerlistview.Items.Count; // Itemindex zuweisen Listitem := Benutzerlistview.Items.Add; Listitem.Caption := newBenutzerverwaltung.FBenutzername; // Listitemcaption zuweisen Benutzerlistview.Items.Item[Index].Data := newBenutzerverwaltung; // Den Datenzeiger setzen ShowMessage('Benutzer existierte noch nicht in der Liste'); end; end; Danke im voraus mal wieder Matthias |
Re: FindData beim Listview
Hi
Abgesehen davon, das deine Kommentare etwas verwirren Zitat:
Zitat:
Zitat:
Gruß oldmax |
Re: FindData beim Listview
Habe ich mir schon fast gedacht. Nur wie soll ich das denn besser lösen?
Ich dachte ich suche das neu erzeugt Objekt in dem Listview??? Wie löse ich das denn besser? Gruß Matthias P.S. vielleicht komme ich ja auch selbst noch drauf. Danke schonmal für den Tip. |
Re: FindData beim Listview
Hallo Matthias.
Die Idee ist vollkommen richtig. Gucken wir uns an nach was du suchst.
Delphi-Quellcode:
Du suchst nach einer Instanz auf das Objekt "newBenutzerverwaltung" auf das die Eigenschaft "Data" eines
Listitem := Benutzerlistview.FindData(0,TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer),True,True);
Eintrags des Listview zeigt. An die Funktion "FindData" übergibst du aber folgende Referenz
Delphi-Quellcode:
Das heisst du benutzt das Feld FBenutzerNummer, das vermutlich ein Integer ist, und machst eine Typumwandlung
TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer)
in ein Objekt vom Typ TBenutzerverwaltung. Du übergibst an FindData() einen Zeiger auf "newBenutzerverwaltung.FBenutzerNummer", also den Integer. FindData() wird diesen Zeiger natürlich nicht finden, da ja der Zeiger auf "newBenutzerverwaltung" gespeichert wurde. Übrigends kann man
Delphi-Quellcode:
auch so machen
Benutzerlistview.Items.Item[Index].Data := newBenutzerverwaltung;
Delphi-Quellcode:
Gruß
ListItem.Data := newBenutzerverwaltung;
Matthias |
Re: FindData beim Listview
Wenn ich ehrlich bin, dann habe ich die Antwort nicht ganz verstanden, denn leider wird mir damit immer noch nicht klar, wie ich jetzt in dem Listview nach dem erzeugten Objekt suchen kann...
Trotzdem Danke für die Hilfe Gruß Matthias |
Re: FindData beim Listview
Hallo Matthias.
Du darfst nicht nach
Delphi-Quellcode:
suchen.
Listitem := Benutzerlistview.FindData(0, TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer), True, True);
Du hast an Listitem.Data eine Referenz auf eine Instanz von TBenutzerverwaltung angehängt. Du läßt aber FindData() nach einer Referenz auf TBenutzerverwaltung.FBenutzerNummer suchen. Du musst nach dem Objekt suchen, das du an Listitem.Data angehängt hast.
Delphi-Quellcode:
Gruß
Listitem := Benutzerlistview.FindData(0, newBenutzerverwaltung, True, True);
Matthias |
Re: FindData beim Listview
Habe es vorher auch schon so probiert. Irgendwie gibt Finddata immer Nil zurück. Verstehe einfach nicht wieso. Irgendwelche Erklärungen dafür? Bei dem Anlegen eines Eintrages prüfe ich wie bei dir beschrieben, ob die Benutzernummer bereits existiert.. Oder müssen die Daten aus Data exakt identisch sein? Irgendwie leuchtet mir das noch nicht ganz ein.
In der Hilfe steht ja leider auch kein brauchbares Beispiel. Trotzdem schonmal vielen Dank für die Hilfe werde mich in Zukunft noch ein wenig mehr mit Instanzen und Referenzen beschäftigen, damit ich alles auch wirklich verstehe. Gruß Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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