AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Eintrag nur hinzufügen wenn nicht in Listview vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

Eintrag nur hinzufügen wenn nicht in Listview vorhanden

Ein Thema von LordGinn · begonnen am 13. Okt 2014 · letzter Beitrag vom 21. Okt 2014
 
jensw_2000
(Gast)

n/a Beiträge
 
#7

AW: Eintrag nur hinzufügen wenn nicht in Listview vorhanden

  Alt 14. Okt 2014, 09:05
In den Crossposts bereits geklärt. Hier noch einmal etwas ausführlicher in einer anderen Variante

Delphi-Quellcode:

interface ...

type
  // später leichter lesbar ...
  TEindeutigeEintraegeAddResult = (arVorhanden, arNeu);

  TMainForm: class(TForm)
    ...
  private
    // Feld, in dem die Stringlist Instanz gespeichert wird
    fEindeutigeEintraege : TStringList
    // read only Property für die Liste "EindeutigeEintraege".
    // Über diese Property wird aus dem Programm auf die Liste zugegriffen!!
    property EindeutigeEintraege:TStringList read get_EindeutigeEintraege;
    // Getter für die Property "EindeutigeEintraege"
    function get_EindeutigeEintraege:TStringList;
    function EindeutigeEintraegeAdd(const neuerEintrag:String):TEindeutigeEintraegeAddResult;

  protected
    procedure ButtonIrgendwasClick(Sender:TObject)
  public
  end;

implementation

// Getter für die Property "EindeutigeEintraege"
function TMainForm.get_EindeutigeEintraege:TStringList;
begin
  // gibt es die Liste schon als Instanz im Speicher? > wenn ja zurückgeben
  if assigned(fEindeutigeEintraege) then exit(fEindeutigeEintraege);

  // anderenfalls neue Instanz erstellen, Liste konfigurieren und zurückgeben
  fEindeutigeEintraege := TStringList.Create;
  fEindeutigeEintraege.sorted := true; // muss sein, damit der Duplettencheck greift. ist auch schneller!
  fEindeutigeEintraege.Duplicates := dupIgnore; // Liste erstellt keine doppelten Einträge (ignoriert diese ohne Fehler zu werfen)

  // fertig konfigurierte Listeninstanz zurückgeben
  exit(fEindeutigeEintraege);
  
end;


function TMainForm.EindeutigeEintraegeAdd(const neuerEintrag:String):TEindeutigeEintraegeAddResult;
  var lCount:Integer;
begin
  lCount := EindeutigeEintraege.Count;
  EindeutigeEintraege.add(neuerEintrag);

  // wurde ein neuer Eintrag hinzugefügt oder ist die Anzahl der Einträge gleich?
  // den Eintrag gab es schon
  if lCount = EindeutigeEintraege.Count then exit(arVorhanden); // neuerEintrag war bereits vorhanden
  // den Eintrag gab es noch nicht
  exit(arNeu);
end;


procedure TMainForm.ButtonIrgendwasClick(Sender:TObject);
  var lMachWas:Boolean;
begin
  // check: muss etwas getan werden?
  if form2.RadioButton1.checked then
    lMachWas := EindeutigeEintraegeAdd(edit1.text) = arNeu;

  // ab hier ist durch den ersten Aufruf sichergestellt, dass fEindeutigeEintraege instanziert ist
  try
    if lMachWas then begin
    // "with" ist nicht immer von Vorteil. aber um bei deinem Beispiel zu bleiben ...
    with form1.listview1.items.add do begin
      caption:=edit1.text;
      subitems.add(edit2.text);
      subitems.add(edit3.text);
      subitems.add(edit4.text);
    end;
    showmessage('Eintrag wurde hinzugefügt');
  except
    // Verarbeitung ist in die Grütze gegangen . vorgemerkten eindeutigen Eintrag wieder entfernen
    EindeutigeEintraege.delete(edit1.text);
  end;
end;
Dann im MainForm.Destroy Event aufräumen ...
  if assigned(fEindeutigeEintraege) then fEindeutigeEintraege.free;

Geändert von jensw_2000 (14. Okt 2014 um 09:28 Uhr)
  Mit Zitat antworten Zitat
 

 

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 13:36 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 by Thomas Breitkreuz