Autor Beitrag
LordGinn
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 13.10.14 19:45 
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.

ausblenden 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 www.delphipraxis.net...tview-vorhanden.html

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von LordGinn am Di 14.10.14 14:33, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 13.10.14 21: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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  TYourForm = class(TForm)
  //...
  private
    FAvailableEntries: TStringList;
  end;

// in OnCreate deines Formulars:
  FAvailableEntries := TStringList.Create;

// im OnDestroy deines Formulars:
  FAvailableEntries.Free;

Nun kannst du beim Hinzufügen einfach den Wert auch in deine Liste einfügen:
ausblenden Delphi-Quelltext
1:
  FAvailableEntries.Add(...);					

Und auch prüfen, ob ein Eintrag schon vorhanden ist:
ausblenden Delphi-Quelltext
1:
2:
  if FAvailableEntries.IndexOf(...) < 0 then
    //noch nicht vorhanden

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


Zuletzt bearbeitet von jaenicke am Di 14.10.14 14:26, insgesamt 1-mal bearbeitet
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Mo 13.10.14 22:15 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
  if FAvailableEntries.IndexOf(...) <= 0 then
    //noch nicht vorhanden


Bei =0 ist der Eintrag vorhanden, und zwar an oberster Stelle. Besser so:

ausblenden Delphi-Quelltext
1:
2:
  if FAvailableEntries.IndexOf(...) < 0 then 
    // bzw. ... = -1


ub60
LordGinn Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 14.10.14 09: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.10.14 14: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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 18.10.14 09:03 
Danke für die Antworten.

Es wird ne Weile dauern, bis ich das verstehe, aber ich hab die Zeit. ;)
LordGinn Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 19.10.14 11: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.

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 21.10.14 16:18 
Ich habs geschafft. ^^

ausblenden 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;