AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Items aus einer Liste abfragen

Ein Thema von ByTheTime · begonnen am 21. Feb 2012 · letzter Beitrag vom 21. Feb 2012
Antwort Antwort
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

Items aus einer Liste abfragen

  Alt 21. Feb 2012, 12:50
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:
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;
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.
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:
if AnsiSameText(ComboContent.Text, SchwimmenListe3km.Items) then
     begin
       ComboSkm.Text := '3'; //Schwimmen Kilometer
       ComboExAkm.Text := '3'; //Extensives Ausdauertraining (ExA) Kilometer
     end;
Ich hoffe ich habe mich annährend verständlich ausgedrückt, wie ich mir das vorstelle :S Habt ihr sowas ähnliches schonmal gemacht?

Lukas
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Items aus einer Liste abfragen

  Alt 21. Feb 2012, 12:54
Häng' doch Objekte mit den benötigten Zusatzinformationen an die Items.Objects ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

AW: Items aus einer Liste abfragen

  Alt 21. Feb 2012, 12:56
Abfrage ob der "Suchtext" in deineCombobox vorhanden ist..
Code:
deineCombobox.items.indexOf('mein itemtext') >= 0
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Items aus einer Liste abfragen

  Alt 21. Feb 2012, 13:35
Ich hoffe ich habe mich annährend verständlich ausgedrückt, wie ich mir das vorstelle ...
Um Bummis Vorschlag wirst du nicht herumkommen, denn du kannst im Item-String nur eine begrenzte Information unterbringen. Ich weiß nicht wie gut du dich mit dem anhängen von Objekten an Items auskennst, wobei das eigentlich relativ simpel ist.

Ich habe zufällig an einer anderen Stelle mal ein Beispiel gepostet. Das sieht in etwa so aus:
Delphi-Quellcode:
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;
Solltest du ein Profi sein, übersehe das Beispiel.

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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Items aus einer Liste abfragen

  Alt 21. Feb 2012, 13:40
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:05 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