Entwickler-Ecke
Sonstiges (Delphi) - Eintrag nur hinzufügen wenn nicht in Listview vorhanden
LordGinn - Mo 13.10.14 18:45
Titel: Eintrag nur hinzufügen wenn nicht in Listview vorhanden
Hallo :)
Ich möchte Einträge aus Editfeldern in eine Listview übertragen, aber nur wenn sie nicht schon in dieser zu finden sind.
Mit meinem derzeitigen Code kann ich nur einen Eintrag hinzufügen und danach keinen mehr. Das sehe ich auch an dem Code. ;)
Zwei Varianten möchte ich gerne verstehen:
1. Wo muss ich edit1.text einfügen? (Wenn edit1.text schon in der ersten Spalte zu finden ist, soll kein neuer Eintrag erstellt werden und eine showmessage folgen)
2. Wo muss ich edit1.text und edit4.text einfügen? (So wie oben nur wenn edit1.text und edit4.text in der selben Zeile vorhanden sind)
Bitte so einfach wie möglich, bin Anfänger.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.Button1Click(Sender: TObject); begin if form2.RadioButton1.checked=true and assigned (form1.listview1.items[0])=false then begin with form1.listview1.items.add do begin caption:=edit1.text; subitems.add(edit2.text); subitems.add(edit3.text); subitems.add(edit4.text); showmessage('Eintrag wurde hinzugefügt'); end; end; |
Danke schon mal. :)
Crosspost
http://www.delphipraxis.net/182254-eintrag-nur-hinzufuegen-wenn-nicht-listview-vorhanden.html
Moderiert von
Narses: Quote- durch Delphi-Tags ersetzt
jaenicke - Mo 13.10.14 20:48
Hallo und :welcome:
Ich würde dir raten zusätzlich eine TStringList zu verwenden und darüber festzustellen, ob ein Eintrag schon vorhanden ist.
Sprich:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TYourForm = class(TForm) private FAvailableEntries: TStringList; end;
FAvailableEntries := TStringList.Create;
FAvailableEntries.Free; |
Nun kannst du beim Hinzufügen einfach den Wert auch in deine Liste einfügen:
Delphi-Quelltext
1:
| FAvailableEntries.Add(...); |
Und auch prüfen, ob ein Eintrag schon vorhanden ist:
Delphi-Quelltext
1: 2:
| if FAvailableEntries.IndexOf(...) < 0 then |
Das ist viel schneller, als in der TListView die Einträge zu durchsuchen, auch wenn das theoretisch auch geht. Da gibt es glaube ich auch ein Find oder IndexOf oder so.
// EDIT:
Korrigiert, danke für den Hinweis
ub60 - Mo 13.10.14 21:15
jaenicke hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| if FAvailableEntries.IndexOf(...) <= 0 then |
|
Bei =0 ist der Eintrag vorhanden, und zwar an oberster Stelle. Besser so:
Delphi-Quelltext
1: 2:
| if FAvailableEntries.IndexOf(...) < 0 then |
ub60
LordGinn - Di 14.10.14 08:04
Danke euch.
Jetzt auf Anhieb hab ich es noch nicht verstanden mit der StringList. Wo muss man dann edit1.text bzw edit1.text und edit4.text reinpacken?
jaenicke - Di 14.10.14 13:28
In diese Liste, sprich bei Add und IndexOf musst du den Wert einsetzen, anhand dessen du feststellen willst, dass der Eintrag schon vorhanden ist.
Wo dieser eindeutige Wert drin steht, kannst nur du wissen, das muss ja nicht zwangsläufig die erste Spalte sein.
Ich vermute aber du möchtest Edit1 benutzen, also ...Add(Edit1.Text) und ...IndexOf(Edit1.Text).
LordGinn - Sa 18.10.14 08:03
Danke für die Antworten.
Es wird ne Weile dauern, bis ich das verstehe, aber ich hab die Zeit. ;)
LordGinn - So 19.10.14 10:54
Ich habe jetzt die Radiobuttons entfernt und dafür auf der Form1 mehrere Buttons erstellt, das hat einiges vereinfacht.
Jetzt hat jede Listview einen eigenen Button fürs Hinzufügen und die Überprüfung funktioniert.
Ich muss dann nur noch herausfinden, wie man folgendes schreibt:
Wenn edit1.text und edit4.text in der selben Zeile der Listview auftauchen ist vorhanden true.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm7.Button1Click(Sender: TObject); var i: integer; vorhanden: boolean; begin vorhanden:=false; for i := 0 to Form1.Listview2.Items.Count - 1 do if (form1.ListView2.Items[i].Caption=edit1.text) then vorhanden:=true; if vorhanden=true then showmessage('Eintrag ist bereits vorhanden'); if vorhanden=false then begin with form1.listview2.items.add do begin caption:=edit1.text; subitems.add(edit2.text); subitems.add(edit3.text); subitems.add(edit4.text); showmessage('Eintrag wurde hinzugefügt'); end; end; end; |
LordGinn - Di 21.10.14 15:18
Ich habs geschafft. ^^
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm4.Button1Click(Sender: TObject); var i: integer; vorhanden: boolean; begin vorhanden:=false; for i := 0 to Form1.Listview7.Items.Count - 1 do if (form1.ListView7.Items[i].Caption=edit1.text) and (form1.ListView7.Items[i].subitems[2]=edit4.text)then vorhanden:=true; if vorhanden=true then showmessage('Eintrag ist bereits vorhanden'); if vorhanden=false then begin with form1.listview7.items.add do begin caption:=edit1.text; subitems.add(edit2.text); subitems.add(edit3.text); subitems.add(edit4.text); subitems.add(edit5.text); showmessage('Eintrag wurde hinzugefügt'); end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!