Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Anweisungen werden ignoriert ??? (https://www.delphipraxis.net/141665-anweisungen-werden-ignoriert.html)

DutchmanTom 13. Okt 2009 16:46


Anweisungen werden ignoriert ???
 
Hi Leuts,
ich bins mal wieder, der Anfänger mitd en lästigen Fragen ^^

Diesmal habe ich mal wieder ein Problme mit meinem Adressbuch.
Ich habe inerhalb des Tages eine Funktion eingebaut, die dem Benutzer erlaubt, per ComboBox die ANzeige zu ändern.
Man hat jetzt die Wahl zwischen "Nachname, Vorname" und "Vorname, Nachname"
Hier der Code dazu:
Delphi-Quellcode:
procedure TForm1.CBAnordnungChange(Sender: TObject);
var i : Integer;
begin
  LBAdressen.Clear;
  for i := 0 to High(Adressen) do
  case TComboBox(sender).ItemIndex of
    0: begin
        LBAdressen.Items.Add(Adressen[i].Nachname +','+' '+Adressen[i].Vorname);
       end;

    1: begin
        LBAdressen.Items.Add(Adressen[i].Vorname+','+' '+Adressen[i].Nachname);
       end;
  end;
end;
Jetzt gibt es in diesem Adressbucha auch eine Sortier-Funktion:
Delphi-Quellcode:
procedure TForm1.BtnSortierenClick(Sender: TObject);
var i: Integer;
begin
  LBAdressen.Clear;
  BubbleSort(Adressen);
  for i := 0 to High(Adressen) do
    LBAdressen.Items.Add(Adressen[i].Nachname + ',' + ' ' + Adressen[i].Vorname);
end;
Das Problem ist nur, dass die List, sobald man sie sortiert wieder in die Anfangsanzeige wechselt (also Nachname, Vorname).
Meine Idee war, das Programm einfach nach dem Sortieren die ComboBox kontrolieren zu lassen.
Sah dann bei mir im Quellcode so aus:
Delphi-Quellcode:
procedure TForm1.BtnSortierenClick(Sender: TObject);
var i: Integer;
begin
  LBAdressen.Clear;
  BubbleSort(Adressen);
  for i := 0 to High(Adressen) do
    LBAdressen.Items.Add(Adressen[i].Nachname + ',' + ' ' + Adressen[i].Vorname);

  CBAnordnungChange(Sender);
end;
Hat nicht funktioniert !!! ^^

In meiner grenzenlosen Verzweiflung habe ich dann einfach den kompletten Befehl, welcher im ersten Delphi-Anhang zu sehen ist, in das Sortier-Procedere hineingeschrieben.

Und wieder war keine Auswirkung zu sehen !

Da ich mir nicht vorstellen kann, das Delphi-Programme einfach Teile des Quellcodes ignorieren muss es irgendwo ein Problem geben.

Da ich es nicht finde hoffe ich auf eure Hilfe.

Gruß
DutchmanTom

DeddyH 13. Okt 2009 16:58

Re: Anweisungen werden ignoriert ???
 
Zitat:

Delphi-Quellcode:
procedure TForm1.BtnSortierenClick(Sender: TObject);
var i: Integer;
begin
  LBAdressen.Clear;
  BubbleSort(Adressen);
  for i := 0 to High(Adressen) do
    LBAdressen.Items.Add(Adressen[i].Nachname + ',' + ' ' + Adressen[i].Vorname); //Nachname, Vorname
end;

Hier müsstest Du halt noch auswerten, wie die Anzeige erfolgen soll. Allerdings würde ich mir eine Klasse für die Adressen und eine für die Adressliste schreiben, das ist auf Dauer einfacher zu handhaben.

Bbommel 13. Okt 2009 16:59

Re: Anweisungen werden ignoriert ???
 
Das Problem ist folgendes: Beim OnChange der Combobox greifst du wie folgt auf die Combobox zu:

Delphi-Quellcode:
case TComboBox(sender).ItemIndex of
Hier ist das auch völlig in Ordnung, da normalerweise ja die Combobox der "sender" ist.

Wenn du allerdings nun von dem Button-Event des Sortierens dann diese Funktion aufrufst mit
Delphi-Quellcode:
CBAnordnungChange(Sender);
Dann ist der Sender in der Change-Funktion nicht mehr die Combobox, sondern der Button. Der Typecast, den du mit "TComboBox(sender)" gemacht hast, wird dann ziemlichen Datenmüll liefern, da ein Button keinen ItemIndex hat.

Die einfachste Abhilfe wäre wohl, oben direkt die ComboBox abzufragen, also:
Delphi-Quellcode:
case CBAnordnung.ItemIndex of
Nebenbei bemerkt kannst du dir beim Sortieren dann auch das Füllen der Liste sparen, da du sie danach ja direkt wieder löschst und neu füllst...

Bis denn
Bommel


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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