AGB  ·  Datenschutz  ·  Impressum  







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

ListBox Wert zuweisen

Ein Thema von dR4g0N · begonnen am 1. Nov 2004 · letzter Beitrag vom 2. Nov 2004
Antwort Antwort
dR4g0N
(Gast)

n/a Beiträge
 
#1

ListBox Wert zuweisen

  Alt 1. Nov 2004, 15:51
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?
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 15:53
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

listbox1.items[i] := edit1.text; Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 15:55
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 16:00
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
  Mit Zitat antworten Zitat
dR4g0N
(Gast)

n/a Beiträge
 
#5

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 16:36
Zitat von Aenogym:
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

listbox1.items[i] := edit1.text; Aenogym
nein leider net, also in der listbox sind schon die verschienden items. nur möchte ich jetzt jedem item noch einen zweiten string zuweisen. und wenn er markiert wird, dass der 2 stringwert in einem editfeld erscheint.

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.
  Mit Zitat antworten Zitat
rudi_

Registriert seit: 10. Okt 2004
Ort: Neuss
34 Beiträge
 
Delphi 7 Professional
 
#6

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 17:09
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:
type
  TInfoObj = class(TObject)
  private
    FNachname: string;
  published
    property Nachname: string
      read FNachname write FNachname;
end;
wenn du jetzt deine Namen eintragen willst, ginge das z.b. folgendermaßen:

Delphi-Quellcode:
procedure eingabe(Vorname,Nachname: string)
var
  Eintrag: TInfoObj;
begin
  Eintrag := TInfoObj.Create;
  Eintrag.Nachname := Nachname;
  ListBox1.Items.AddObject(Vorname,Eintrag);
end;
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)


eine schleife zum ausgeben der Vor-/Nachnamen könnte z.B. so aussehen:

Delphi-Quellcode:
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;
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.

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:
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;
damit werden erst alle Objekte sauber aus dem speicher entfernt, bevor auch die Verweise darauf entfernt werden
Wie Sie sehn,
sehn Sie nichts.
  Mit Zitat antworten Zitat
dR4g0N
(Gast)

n/a Beiträge
 
#7

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 17:23
ahh sry völlig übersehen. THX @ euch allen, werd es mir nachher mal genauer angucken, muss nu arbeiten.
  Mit Zitat antworten Zitat
dR4g0N
(Gast)

n/a Beiträge
 
#8

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 23:00
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
  Mit Zitat antworten Zitat
rudi_

Registriert seit: 10. Okt 2004
Ort: Neuss
34 Beiträge
 
Delphi 7 Professional
 
#9

Re: ListBox Wert zuweisen

  Alt 2. Nov 2004, 17:56
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
Wie Sie sehn,
sehn Sie nichts.
  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 21:48 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