![]() |
ListBox - Record zu Item hinzufügen
Hallo!
Ich habe ein Listbox "Mitarbeiter" mit verschiedenen Einträgen(=Mitarbeitern). Wenn ich jetzt auf einen Mitarbeiter klicke, dann werden unter der Listbox 3 Editfelder angezeigt, wo ich zusätzliche Daten zu dem ausgewählten Mitarbeiter eingeben kann! Natürlich müssen die eingegebenen Daten irgendwo zwischengespeichert werden. Ich hätte das in Form eines Records gemacht Record "Mitarbeiterinfo" Adresse:String Telefon:String; .... Gibt es nun eine Möglichkeit, dass ich, wenn ich die Infos eines ausgewählten Mitarbeiters eingebe, das Record befülle und dann direkt zu dem bereits bestehenden ausgewählten Item hinzuspeichere! Ich weiss, wenn man ein neues Item anlegt (mit AddObject), kann man auch ein Object hinzuspeichern! Ich will aber kein neues Item anlegen, sondern das REcord zu einem bereits bestehenden Item geben! Geht das irgendwie? mfg |
Re: ListBox - Record zu Item hinzufügen
Das Property Objects gewährt doch auch Schreib-Zugriff. Also einfach
Delphi-Quellcode:
Listbox1.Items.Objects[i]:=Zeiger_auf_den_Record
|
Re: ListBox - Record zu Item hinzufügen
das hab ich doch schon probiert, aber leider kommt da ein FEhler "Ungültige Typumwandlung", wenn ich es wie folgt mache:
[code] Record.name ='Test'; Record.telefon = '12345'; listbox.items.object[i] := Record; |
Re: ListBox - Record zu Item hinzufügen
ein Object ist intern ein Pointer zu den Daten. Ein Record ist aber eben kein Pointer.
Die einfachste Variante, wenn du mit Pointern noch nicht so fit bist, ist das du einfach ein Array für deine Records nimmst und der Array-Index 0 ist eben für den 0ten Eintrag der Listbox etc. |
Re: ListBox - Record zu Item hinzufügen
hmm, die Idee ist schon mal nicht schlecht, nur leider soll es möglich sein, dass man die Reihenfolge der Items in der Listbox verändern kann, d.h. ein bestimmtest Item soll z.B. in der Listbox um eine Position nach oben geschoben werden, und dann würde ja das mit dem Array nicht mehr zusammenpassen!
Gibt es keine Möglichkeit, mit der ich das REcord zu dem Item hinzuspeichern kann? mfg |
Re: ListBox - Record zu Item hinzufügen
du müsstest dynamsich speicher anfordern für dein Array und den Pointer auf diesen Speicher dann in der Listbox bei Object speichern. Oder besser. Du nimmst keinen Record sondern eine Klasse. Die Klasseninstanz kannst du dann auch zuweisen.
Wenn dir das nicht zusagt kannst du wieder zu der anderen Lösung mit dem Array greifen. Wenn in der Listbox ein Item verschoben wird brauchst du ja nur zeitlich auch in dem Array das Item verschieben. |
Re: ListBox - Record zu Item hinzufügen
Die Objects sind genau für solche Fälle gedacht ! Aber so muss der Typ aussehen :
Delphi-Quellcode:
Die Delphi-Hilfe sagt noch das :
TMitarbeiterinfo = class(TObject)
Adresse:String Telefon:String; ... end;
Delphi-Quellcode:
Das lässt sich 1:1 auf TListBox anwenden. Aber Achtung mit den Objects ! Da wird Speicher angefordert und der sollte auch wieder weg.
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer; begin for i := 0 to PageControl1.PageCount - 1 do ComboBox1.Items.AddObject(PageControl1.Pages[i].Name, PageControl1.Pages[i]); ComboBox1.ItemIndex := 0; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin if (Sender is TComboBox) then with (Sender as TComboBox) do PageControl1.ActivePage := TTabSheet(Items.Objects[ItemIndex]); end; Noch ein Verweis auf die Delphi-Hilfe : :warn: Zitat:
|
Re: ListBox - Record zu Item hinzufügen
Ok, ich glaub ich mach mir ne Klasse "Mitarbeiterinfo" mit den Membervariablen "Name, Telefon, ...", und theoretisch könnte ich doch jedesmal eine Instanz dieser Klasse zu einem Item hinzuspeichern, oder?
Aber muss ich da eigentlich jedesmal ne neue Instanz für jedes Item anlegen, oder reicht es, wenn ich nur 1 Instanz für alle Mitarbeiterdaten anlege (eigentlich kann das nicht gehen, weil dann überschreibe ich ja immer die Daten des vorherigen Mitarbeiters, oder, für mich wärs logisch, wenn jeder Mitarbeiter+Info ne eigene Instanz braucht)! mfg |
Re: ListBox - Record zu Item hinzufügen
Zitat:
|
Re: ListBox - Record zu Item hinzufügen
Jedes Item kriegt zusätzlich sein Object (ist quasi Record). So ist das. Du kannst da auch z.B. Farben speichern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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-2025 by Thomas Breitkreuz