AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindData beim Listview

Ein Thema von Preddy2005 · begonnen am 19. Sep 2006 · letzter Beitrag vom 20. Sep 2006
Antwort Antwort
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#1

FindData beim Listview

  Alt 19. Sep 2006, 12:10
Hallo mal wieder. Irgendwie habe ich ein kleines Problem mit FindData... Kann mir irgendjemand hier sagen, was ich falsch mache?

Delphi-Quellcode:

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;
Es lassen sich im moment unendlich viele Benutzer zur Liste hinzufügen... Verstehe irgendwie nicht ganz wieso. Hoffe mir kann jemand erklären wieso.

Danke im voraus mal wieder

Matthias
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#2

Re: FindData beim Listview

  Alt 19. Sep 2006, 13:08
Hi
Abgesehen davon, das deine Kommentare etwas verwirren

Zitat:
if Listitem <> nil then // Eintrag noch nicht vorhanden
und
Zitat:
else
begin // Eintrag bereits vorhanden
glaube ich fast, das du an dieser Stelle
Zitat:
Listitem := Benutzerlistview.FindData(0,TBenutzerverwaltung
(newBenutzerverwaltung.FBenutzerNummer),True,True) ;
gar nicht auf deine Benutzerlistview zugreifst, sondern auf eine gerade erzeugte Instanz davon, und die dürfte leer sein.

Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#3

Re: FindData beim Listview

  Alt 19. Sep 2006, 13:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neptun
Neptun

Registriert seit: 13. Jul 2006
Ort: Mainz
13 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: FindData beim Listview

  Alt 19. Sep 2006, 14:06
Hallo Matthias.

Die Idee ist vollkommen richtig.
Gucken wir uns an nach was du suchst.

Listitem := Benutzerlistview.FindData(0,TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer),True,True); Du suchst nach einer Instanz auf das Objekt "newBenutzerverwaltung" auf das die Eigenschaft "Data" eines
Eintrags des Listview zeigt.

An die Funktion "FindData" übergibst du aber folgende Referenz TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer) Das heisst du benutzt das Feld FBenutzerNummer, das vermutlich ein Integer ist, und machst eine Typumwandlung
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 Benutzerlistview.Items.Item[Index].Data := newBenutzerverwaltung; auch so machen

ListItem.Data := newBenutzerverwaltung; Gruß
Matthias
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#5

Re: FindData beim Listview

  Alt 19. Sep 2006, 20:10
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
  Mit Zitat antworten Zitat
Benutzerbild von Neptun
Neptun

Registriert seit: 13. Jul 2006
Ort: Mainz
13 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: FindData beim Listview

  Alt 20. Sep 2006, 10:28
Hallo Matthias.

Du darfst nicht nach
Listitem := Benutzerlistview.FindData(0, TBenutzerverwaltung(newBenutzerverwaltung.FBenutzerNummer), True, True); suchen.
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.
Listitem := Benutzerlistview.FindData(0, newBenutzerverwaltung, True, True); Gruß
Matthias
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#7

Re: FindData beim Listview

  Alt 20. Sep 2006, 12:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.
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