![]() |
Items aus einer Liste abfragen
Der Titel ist nicht ganz passend gewählt, ich muss das erklären...
Hallo, mein Programm besitzt u.a. 2 ComboBoxen. In einer wählt man eine Disziplin aus (z.B. Schwimmen). Dahinter befindet sich eine ComboBox in der man den Trainingsinhalt auswählt (z.B. '3km'). Jetzt soll mein Programm andere Felder ergänzen (2 Felder, einmal beim Edit 'Schwimmen - km' die Kilometer Anzahl und einmal beim Edit 'Umfang des Extensiven Trainings' ebenfalls die km). Das habe ich bisher so gelöst:
Delphi-Quellcode:
Seht ihr mein Problem? Ich muss für jede Distanz einen einzelnen "if .. or .. then" hinzufügen. Mit der Zeit wird das jedoch unübersichtlich und umständlich, denn 3km kann man auf 1000 verschiedene weisen schwimmen (10x300m, 100x30m, 2x1km, etc.). Und das nun noch für sehr viele andere Disziplinen wie Fahrrad fahren, Laufen, etc. Jetzt suche ich eine Möglichkeit das ganze zu vereinfachen, habe jedoch nichts passendes gefunden.
if AnsiSameText(ComboDis.Text, 'Schwimmen') then //Überprüfen ob schwimmen, denn es gibt ja z.B. noch Fahrrad, etc.
begin if (AnsiSameText(ComboContent.Text, '3km')) or (AnsiSameText(ComboContent.Text, '2x1,5km')) then //or 3x1km or ... begin ComboSkm.Text := '3'; //Schwimmen Kilometer ComboExAkm.Text := '3'; //Extensives Ausdauertraining (ExA) Kilometer end; {Das ganze noch für diverse ander Disziplinen und Distanzen} end; Ich habe mir das ungefährso vorgestellt: Ich habe eine Art Liste. Die heißt z.B. "SchwimmenListe3km". Hier trage ich jetzt alle Möglichkeiten ein (3km, 10x300m, 100x30m, 2x1km, etc.). Jetzt muss ich im Prinzip die Liste nach ihren Items abfragen:
Delphi-Quellcode:
Ich hoffe ich habe mich annährend verständlich ausgedrückt, wie ich mir das vorstelle :S Habt ihr sowas ähnliches schonmal gemacht?
if AnsiSameText(ComboContent.Text, SchwimmenListe3km.Items) then
begin ComboSkm.Text := '3'; //Schwimmen Kilometer ComboExAkm.Text := '3'; //Extensives Ausdauertraining (ExA) Kilometer end; Lukas |
AW: Items aus einer Liste abfragen
Häng' doch Objekte mit den benötigten Zusatzinformationen an die Items.Objects ...
|
AW: Items aus einer Liste abfragen
Abfrage ob der "Suchtext" in deineCombobox vorhanden ist..
Code:
deineCombobox.items.indexOf('mein itemtext') >= 0
|
AW: Items aus einer Liste abfragen
Zitat:
Ich habe zufällig an einer anderen Stelle mal ein Beispiel gepostet. Das sieht in etwa so aus:
Delphi-Quellcode:
Solltest du ein Profi sein, übersehe das Beispiel.
type
TInfo = class DT: TDateTime; end; procedure TForm1.Button1Click(Sender: TObject); var Info: TInfo; p: Integer; begin with ListBox1 do begin Info := TInfo.Create; //Beispiel-Objekt Erstellen Info.DT := Now; p := Items.AddObject('Datum und Zeit (' + DateTimeToStr(Info.DT) + ')', Info); //Zuweisen if p > -1 then ShowMessage(Format('Aktuelle Zeit im Item %d als Objekt gespeichert.', [p])); end; end; procedure TForm1.ListBox1Click(Sender: TObject); var DT: TDateTime; Info: TInfo; begin with ListBox1 do begin if Count = 0 then Exit; if ItemIndex = -1 then Exit; Info := TInfo(Items.Objects[ItemIndex]); //Auslesen DT := Info.DT; ShowMessage('Im Objekt gespeicherte Zeit: ' + TimeToStr(DT)); end; end; procedure TForm1.FormDestroy(Sender: TObject); var i: Integer; Info: TInfo; begin with ListBox1 do //Objekte müssen separat freigegeben werden for i := 0 to Items.Count - 1 do begin Info := TInfo(Items.Objects[i]); //Freigeben Info.Free; end; end; Ansonsten erkläre ich das Beispiel kurz: ganz oben wird eine einfache Klasse erstellt die wie ein Record aufgebaut ist. Bei Zuweisung Objekt erstellen und zuweisen, dann nach belieben damit arbeiten und beim Beenden des Programms (oder leeren der Liste) auch immer das Objekt frei geben. |
AW: Items aus einer Liste abfragen
Auf Dauer dürfte das auch der einzig gangbare Weg sein: Datenhaltung in einer Klasse, Ablegen der Instanzen in einer Liste (das können auch TStrings sein) und Darstellung der Daten dann eben in Edits etc. Damit entfiele dann auch ein Stringvergleich, da man so das Objekt des aktuellen ItemIndex der Combobox auswertet und nicht den Text der Combobox.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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