| Autor |
Beitrag |
Webkommissar
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 12.02.03 19:28
Hi Leute!
Bin immer noch ein neuer in der Programmierszene, deshlab bitte wegen meiner Frage nicht lachen:
Ich hab eine Listbox und drei Editfelder, über die ich in die Listbox Namen einfügen kann. Jetzt will ich, dass ein Name, den man in der Listbox anklickt, wieder oben in den Editfledern angezeigt wird.
Ich benutzte für die Nennung mehrer Namen einen array, vielleicht kann man das ja mit einbinden. Wäre über eure Hilfe sehr glücklich!!!
Gruss..
_________________ Bald ist es geschafft - ABI `03 - juuhuuu!!!
|
|
Webkommissar 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 12.02.03 19:59
Hier noch mein Quellcode:
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: 58: 59: 60: 61: 62: 63:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; ListBox1: TListBox; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ListBox1Click(Sender: TObject);
private { Private-Deklarationen } public { Public-Deklarationen } end; Type Tperson= Record Nachname:string[20]; Vorname:string[15]; Alter:string; End;
var Form1: TForm1; person:array[1..20] of Tperson; i:integer; implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin i:=i+1; person[i].Nachname:=Edit1.Text; person[i].Vorname:=Edit2.Text; person[i].Alter:=Edit3.Text; Listbox1.Items.Add(person[i].Nachname+', '+person[i].Vorname+' ('+person[i].Alter+')'); Edit1.Clear; Edit2.Clear; Edit3.Clear; end;
procedure TForm1.Button2Click(Sender: TObject); begin Close; end;
procedure TForm1.ListBox1Click(Sender: TObject); begin
end;
end. |
Ich muss nämlich die einzelnen Sachen (Nachname,Vorname,Alter) wieder in die passenden Editfenster bringen. Aber wie??
_________________ Bald ist es geschafft - ABI `03 - juuhuuu!!!
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Mi 12.02.03 20:11
Also prinzipiell gehst du so vor:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.ListBox1Click(Sender: TObject); var i: Integer; begin i := ListBox1.ItemIndex; Edit1.Text := ListBox1.Items[i]; end; |
Du musst das halt auf 3 Edit Felder ausweiten.
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
Webkommissar 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 12.02.03 20:28
So bekommich zwar alles ins Edit1 oder 2 oder 3 Fenster. Aber ich will ja den Nachnamen ins Fenter1, den Vornámen ins Fenster2 und das alter ins fenster3 zurück haben!
_________________ Bald ist es geschafft - ABI `03 - juuhuuu!!!
|
|
derDoc
      
Beiträge: 623
Win Vista Prof
D2007 Prof
|
Verfasst: Mi 12.02.03 20:42
Dazu musst du dann den Text, den du von der ausgewählten Spalte bekommst zerschneiden, also bis ', ' und ' (' jeweils alle Zeichen in einen anderen String kopieren.
_________________ MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 12.02.03 21:39
So lange die Reihenfolge der Items in der Listbox immer mit der Reihenfolge der Personen im Array übereinstimmt, geht das einfacher:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| i:=ListBox1.ItemIndex+1; //+1, weil die Listbox bei 0 beginnt, das Array aber bei 1. with person[i] do begin edit1.text:=nachname; edit2.text:=vorname; edit3.text:=alter; end; |
Oder habe ich da jetzt irgendwo krumm gedacht?
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 12.02.03 21:50
Es wäre, glaube ich, zu überlegen, ob man nicht besser einen Listview nimmt. Denn dann hat man alles schön in Spalten.
|
|
Webkommissar 
Hält's aus hier
Beiträge: 15
|
Verfasst: So 16.02.03 21:37
Erstmal danke, die Lösung von Peter hat super geklappt.
Leider stehe ich vor einem erneuten Problem:
Nachdem ich die Einträge wieder in den Edit-Fenstern stehen und verändert habe und dann wieder auf den Button klicke, erscheint in der Liste ein neuer Eintrag. Wie kann ich den alten Überschreiben oder einfach löschen???
_________________ Bald ist es geschafft - ABI `03 - juuhuuu!!!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 16.02.03 21:53
Löschen und dann neu einfügen.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 16.02.03 21:55
Dafür würde ich einen zweiten Button nehmen, denn der erste ist ja dazu da, Einträge hinzuzufügen. Wenn Du dann einen neuen Button "Aendern" hast, kannst Du das Ganze so machen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.AendernClick(Sender: TObject); begin i:=ListBox1.ItemIndex+1; person[i].Nachname:=Edit1.Text; person[i].Vorname:=Edit2.Text; person[i].Alter:=Edit3.Text; ListBox1.Items[i-1]:=person[i].Nachname+', '+person[i].Vorname+' ('+person[i].Alter+')'; end; |
Ohne Gewähr, denn den Code habe ich nicht getestet.
Finde ich besser als Löschen, weil dann auch die Reihenfolge gewahrt bleibt. Könnte den Benutzer stören, wenn der geänderte Eintrag plötzlich nach unten rutscht.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Webkommissar 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 17.02.03 20:20
Super, hat geklappt.
Jetzt meine allerletzte Frage zu diesem Thema:
Wenn ich ein Eintrag in der Liste markiert habe, und dann auf einen Button klicke, will ich, dass diese auf den davor bzw. den danchstehenden Eintrag in der Liste kommt. Es soll dann also z.B. nur der zeite Eintrag in der Liste markiert sein, wenn vorher der dritte markiert war.
_________________ Bald ist es geschafft - ABI `03 - juuhuuu!!!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 17.02.03 21:27
Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.nachobenClick(Sender: TObject); begin if ListBox1.ItemIndex > 0 then //Geht's noch nach oben? ListBox1.Itemindex:=ListBox1.ItemIndex-1; //wenn ja, dann gehe eins nach oben end; |
Etwas abgewandelt geht's dann auch noch unten.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|