![]() |
ListBox Wert zuweisen
Also mit ListBox1.Items.Strings[i] bekomme ich ja sozusagen die Caption von dem markierten ListBoxeintrag heraus. Jetzt meine Frage kann ich zusätzlich jedem Eintrag in einer Listbox einen anderen String zuweisen, sodass wenn ich es markiere in Edit der vorher angegebene String erscheint?
|
Re: ListBox Wert zuweisen
hi,
wenn ich dich richtig verstehe, willst du einem string in der listbox einen wert zuweisen. das geht genauso wie das abrufen. nur eben anders herum ;)
Delphi-Quellcode:
Aenogym
listbox1.items[i] := edit1.text;
|
Re: ListBox Wert zuweisen
Mein Vorschlag: Ein dynamisches Array mit der Länge der TListBox.Items.Count.
Wenn nun ein Item selektiert wird, schreibst du ein Array[TListBox.ItemIndex] oder liest daraus aus. Da TStrings leider nicht für jeden String in der Liste auch noch eine Data-Eigenschaft hat (wie TTreeView), wüsste ich keine andere Lösung, ausser vielleicht einer anderen Stringlist, doch im Prinzip ist es das selbe. |
Re: ListBox Wert zuweisen
Moin!
Keinen Pointer, aber ein Objects[] Array bietet jeder TStrings Nachfahre und daher würde ich das nehmen anstatt noch eine weitere Liste zu verwalten. MfG Muetze1 |
Re: ListBox Wert zuweisen
Zitat:
Mal nen kleines Bsp: ListBox1: Sandra Julia Andrea Marlene ----- Wenn ich jetzt einen Eintrag auswähle, soll jetzt in Edit1 der passende Nachname erscheinen, denn ich vorher zugewiesen hab. EDIT: Achja wenn ihr eine andere Möglichkeit habt, also mit anderen Komponenten ist auch gut. Nur vom prinzip sollte es ungefähr das gleiche sein. |
Re: ListBox Wert zuweisen
hi
wie muetze1 schon gesagt hat, ich würde auf den Objects array zurückgreifen hier mal ein kleines beispiel: du deklarierst dir ein Objekt:
Delphi-Quellcode:
wenn du jetzt deine Namen eintragen willst, ginge das z.b. folgendermaßen:
type
TInfoObj = class(TObject) private FNachname: string; published property Nachname: string read FNachname write FNachname; end;
Delphi-Quellcode:
damit erhälst du jeweils einen Eintrag in der Listbox mit dem Vornamen und gleichzeitig wurde da noch das Objekt vom typ TInfoObj mitgespeichert, das wiederrum den Nachnamen enthält (natürlich können dann auch genauso anderen Sachen gespeichert werden)
procedure eingabe(Vorname,Nachname: string)
var Eintrag: TInfoObj; begin Eintrag := TInfoObj.Create; Eintrag.Nachname := Nachname; ListBox1.Items.AddObject(Vorname,Eintrag); end; eine schleife zum ausgeben der Vor-/Nachnamen könnte z.B. so aussehen:
Delphi-Quellcode:
diese prozedur liest in einer Schleife alle einträge aus und gibt jeweils den Vornamen wie gehabt aus der ListBox aus und holt sich zusätzlich noch das mit-eingetragene Objekt vom typ TInfoObj und liest die .Nachname property daraus aus. Man sollte natürlich noch als Sicherheit später noch überprüfen, ob Eintrag <> nil ist, aber es geht ja erstmal nur ums prinzip.
procedure ausgabe;
var Eintrag: TInfoObj; i: integer; begin for i := 0 to ListBox1.Count -1 do begin Eintrag := ListBox1.Items.Objects[i]; showmessage('Vorname: '+ListBox1.Items.Strings[i]+' Nachname: '+Eintrag.Nachname); end; end; Ausserdem: wenn du ListBox1.Clear aufrufst werden zwar alle Einträge gelöscht und auch die Verweise auf die Objekte; diese bleiben allerdings im Speicher. also müsste man zum leeren der Liste eher sowas hier verwenden:
Delphi-Quellcode:
damit werden erst alle Objekte sauber aus dem speicher entfernt, bevor auch die Verweise darauf entfernt werden
procedure ClearList;
var i: integer; begin for i := 0 to ListBox1.Count - 1 do begin TInfoObj(ListBox1.Items.Objects[i]).Free; end; ListBox1.Items.Clear; end; |
Re: ListBox Wert zuweisen
ahh sry völlig übersehen. THX @ euch allen, werd es mir nachher mal genauer angucken, muss nu arbeiten.
|
Re: ListBox Wert zuweisen
Habs jetzt mal ausprobiert, aber wenn ich jetzt einen Nachnamen zuweisen möchte bekomme ich eine Fehlermeldung die ich mir nicht erklären kann.
Code:
[Fehler] Unit1.pas(40): Undefinierter Bezeichner: 'ListBox1'
[Fehler] Unit1.pas(40): Operator oder Semikolon fehlt [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: ListBox Wert zuweisen
der code war eigentlich nur als beispiel gedacht
"ListBox1" funktioniert ja nur, wenn du auf deiner Form auch eine ListBox mit dem namen ListBox1 hast. Dazu kommt noch, dass ich 1) die funktionen nicht getestet habe und das aus dem Kopf heraus geschrieben habe (sollte allerdings funktionieren) und 2) müsstest du die Funktionen ausgabe() und eingabe() auch noch in dein Formobjekt mit einbinden. z.b.:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TInfoObj = class(TObject) private FNachname: string; published property Nachname: string read FNachname write FNachname; end; type TForm1 = class(TForm) ListBox1: TListBox; procedure eingabe(Vorname,Nachname: string); procedure Ausgabe; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.eingabe(Vorname,Nachname: string); var Eintrag: TInfoObj; begin Eintrag := TInfoObj.Create; Eintrag.Nachname := Nachname; ListBox1.Items.AddObject(Vorname,Eintrag); end; procedure TForm1.ausgabe; var Eintrag: TInfoObj; i: integer; begin for i := 0 to ListBox1.Count -1 do begin Eintrag := TInfoObj(ListBox1.Items.Objects[i]); showmessage('Vorname: '+ListBox1.Items.Strings[i]+' Nachname: '+Eintrag.Nachname); end; end; end. hier fehlt natürlich noch irgendwas, was das ganze auch wirklich einliest (z.b. zwei textfelder für vor/nachname und ein Button, der im OnClick ereigniss die Eingabe prozedur aufruft und die werte der beiden Textfelder als parameter übergibt) und noch ein weiterer button zur ausgabe ps: in der variante ist auch der fehler mit dem semikolon behoben und noch ein weiterer in der ausgabeprozedur |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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