AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListBox - Record zu Item hinzufügen

Ein Thema von darksign · begonnen am 7. Okt 2007 · letzter Beitrag vom 7. Okt 2007
Antwort Antwort
darksign

Registriert seit: 19. Apr 2007
12 Beiträge
 
#1

ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 11:11
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 11:25
Das Property Objects gewährt doch auch Schreib-Zugriff. Also einfach Listbox1.Items.Objects[i]:=Zeiger_auf_den_Record
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
darksign

Registriert seit: 19. Apr 2007
12 Beiträge
 
#3

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 11:54
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 11:57
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
darksign

Registriert seit: 19. Apr 2007
12 Beiträge
 
#5

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 12:02
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 12:06
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 12:14
Die Objects sind genau für solche Fälle gedacht ! Aber so muss der Typ aussehen :
Delphi-Quellcode:
TMitarbeiterinfo = class(TObject)
  Adresse:String
  Telefon:String;
  ...
end;
Die Delphi-Hilfe sagt noch das :

Delphi-Quellcode:
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;
Das lässt sich 1:1 auf TListBox anwenden. Aber Achtung mit den Objects ! Da wird Speicher angefordert und der sollte auch wieder weg.

Noch ein Verweis auf die Delphi-Hilfe :

Zitat:
Mit der Methode AddStrings lassen sich die String-Einträge eines anderen TStrings-Objekts zu einer String-Liste hinzufügen. Wenn beide TStrings-Objekte Strings mit zugeordneten Objekten unterstützen, werden mit den Strings auch die zugehörigen Objekt-Referenzen übertragen.
Brauche bei meinen Objects auch reals usw. Bei Strings scheint das noch einfacher zu gehen.
Gruß
Hansa
  Mit Zitat antworten Zitat
darksign

Registriert seit: 19. Apr 2007
12 Beiträge
 
#8

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 12:58
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 13:00
Zitat von darksign:
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
Deine Schlussfolgerung ist richtig.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: ListBox - Record zu Item hinzufügen

  Alt 7. Okt 2007, 13:17
Jedes Item kriegt zusätzlich sein Object (ist quasi Record). So ist das. Du kannst da auch z.B. Farben speichern.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz