Autor Beitrag
Rayne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Di 20.12.05 19:56 
Hallo!

In meinem kleinen Programm kann man in verschiedene Edit-Felder Dinge eintragen, die dann in einer Datei gespeichert werden.

Jetzt habe ich eine Suche, die es mir ermöglicht, mit Suchbegriffen den jeweiligen passenden Datensatz aus der Datei rauszusuchen und alle dazugehörigen Werte wieder in die Edit-Felder einträgt.

Da es ja vorkommen kann, dass in bestimmten Datensätzen einzelne Bezeichnungen doppelt vorkommen (bspw. Vorname, Artikelname etc.), habe ich mir eine ListBox erstellt, wo alle Datensätze angezeigt werden, wenn es mal einen doppelten Eintrag geben sollte.
Ein Beispiel: Es gibt 2 Datensätze, wo die Person jeweils Klaus heißt. Jetzt suche ich nach Klaus und in meiner ListBox erscheint 2 mal der Eintrag Klaus.

Jetzt kommt mein Problem: Ich möchte, dass wenn ich nun auf solch einen Eintrag in der ListBox klicke, die dazugehörigen weiteren Eigenschaften dieses Datensatzes in den Edit-Feldern eingetragen werden.
Ein Beispiel: Klaus 1 wohnt in Berlin, ist 38 Jahre alt und verheiratet. Klaus 2 wohnt in München, ist 22 Jahre alt und Single.
In meiner ListBox stehen nun 2 Einträge „Klaus“ (das geht bis jetzt alles schon).
Klicke ich auf den ersten Eintrag, sollen in den Edit-Feldern alle Eigenschaften von Klaus 1 eingefügt werden. Klicke ich auf Klaus 2, sollen alle Eigenschaften von ihm dort eingetragen werden.

Der Quellcode für die Suche lautet:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
procedure TForm1.Suchen1Click(Sender: TObject);   //Suche
var q,index : integer; suchstring: string[30];
begin

index:=-1;
suchstring:=Edit15.Text;
Listbox1.Clear;

If Edit15.Text='' Then
begin
ShowMessage('Bitte einen Suchbegriff eingeben!');
end

Else
begin

If RadioButton1.checked=True Then
begin

  for q:=0 to 100 do                                   //sucht nach Gurtzeugen
    begin
      if (saetze[q].gurtzeug = suchstring) then
      begin
      index:=q;
      Listbox1.Items.Add(IntToStr(index+1)+'. '+saetze[q].gurtzeug);  //zeigt alle Suchergebnisse in Listbox an, die den Suchkriterien entsprechen
    end;
    end;
  if index > -1 then
    begin
     edit1.text:=saetze[index].gurtzeug;
     edit2.text:=IntToStr(saetze[index].baujahr1);
     edit3.text:=IntToStr(saetze[index].spruenge1);

     edit4.text:=saetze[index].hauptschirm;
     edit5.text:=IntToStr(saetze[index].baujahr2);
     edit6.text:=IntToStr(saetze[index].spruenge2);

     edit7.text:=saetze[index].reserve;
     edit8.text:=IntToStr(saetze[index].baujahr3);
     edit9.text:=IntToStr(saetze[index].spruenge3);

     edit10.text:=saetze[index].aad;
     edit11.text:=IntToStr(saetze[index].baujahr4);
     edit12.text:=IntToStr(saetze[index].spruenge4);

     Edit13.Text:=IntToStr(saetze[index].preis);

     Edit14.Text:=IntToStr(saetze[index].index);

    end

    Else
    begin
    ShowMessage('Leider keine Treffer gefunden!');
    end;

    end;


Ich weiß nun allerdings nicht, wie das mit der ListBox genau geht, dass mir per Klick die richtigen Daten ausgelesen werden.

Also ich denke mir, dass ich ungefähr so was eintragen muss:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.ListBox1Click(Sender: TObject);
begin

     edit1.text:=saetze[r].gurtzeug;
     edit2.text:=IntToStr(saetze[r].baujahr1);
     edit3.text:=IntToStr(saetze[r].spruenge1);

     edit4.text:=saetze[r].hauptschirm;
     edit5.text:=IntToStr(saetze[r].baujahr2);
     edit6.text:=IntToStr(saetze[r].spruenge2);

     edit7.text:=saetze[r].reserve;
     edit8.text:=IntToStr(saetze[r].baujahr3);
     edit9.text:=IntToStr(saetze[r].spruenge3);

     edit10.text:=saetze[r].aad;
     edit11.text:=IntToStr(saetze[r].baujahr4);
     edit12.text:=IntToStr(saetze[r].spruenge4);

     Edit13.Text:=IntToStr(saetze[r].preis);

     Edit14.Text:=IntToStr(saetze[r].index);

end;


Wenn ich das jedoch so mache, zeigt der mir immer nur den ersten Eintrag im Datensatz an.
Der soll aber „erkennen“, welchen Datensatz ich gerade in der ListBox anklicke und soll genau dessen Eigenschaften in die Edit-Felder eintragen ;-)

Irgendwie kann das doch gar nicht so schwer sein, aber ich komm an dieser Stelle echt nicht mehr weiter :-(

Ich hoffe, ihr könnt mir den entscheidenden Tipp geben :-)

Danke!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 21.12.05 00:22 
Hallo!

Folgendes sollte Dir helfen:
(1) Den aktuell in der Listbox ausgewählten Eintrag findest Du mittels ItemIndex.
(2) Die Items einer Listbox haben die praktische Eigenschaft Objects. In Listbox1.Items.Objects[aIndex] speicherst Du ein Objekt, welches zum Listboxeintrag mit dem Index aIndex gehört. Nun muss man in da aber nicht unbedingt ein Objekt speichern, sondern kann auch per cast einen Integer da rein legen:
ausblenden Delphi-Quelltext
1:
Listbox1.Items.Objects[aIndex] := Integer(5)					

und auslesen:
ausblenden Delphi-Quelltext
1:
aInt := Integer(Listbox1.Items.Objects[aIndex])					


Damit kannst Du zu jedem Listbox-Eintrag den entsprechenden Index für den Datensatz im Array speichern und auslesen. Bei einem Klick kannst Du somit den korrekten Datensatz im Array finden und anzeigen.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".