![]() |
If Anweisungen verkleinern
Hi,
kann mir jemand einen Tipp geben wie ich diesen Quelltext verkleinern kann. Ich empfinde diesen Code nicht sonderlich schön.
Delphi-Quellcode:
if Customer_Info[1,28,1] = 'Klein' then
Begin ComboBoxFirmenG.Items.Add('Mittel'); ComboBoxFirmenG.Items.Add('Groß'); End Else if Customer_Info[1,28,1] = 'Mittel' then Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Groß'); End Else if Customer_Info[1,28,1] = 'Groß' then Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Mittel'); End Else Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Mittel'); ComboBoxFirmenG.Items.Add('Groß'); End; |
Re: If Anweisungen verkleinern
du definierst dein Customer-Info nicht als string, sondenr machst eine eigene Enum dafür...
Delphi-Quellcode:
Oder wie du es eben brauchst ;)
type
TCustomerInfoSize = (ciSmall, ciMedium, ciLarge) und dann kannst du einfach case...of verwenden:
Delphi-Quellcode:
case Customer_Info[1,28,1] of
ciSmall: begin ... end; ciMedium: begin ... end; ciLarge: begin ... end; end; |
Re: If Anweisungen verkleinern
Zitat:
Oder wie hattest du es gemeint? Für mich ist das neu, habe damit noch nicht's zu tun gehabt. Könntest du mir dies einmal zum verstehen erklären? |
Re: If Anweisungen verkleinern
Etwas weniger abstrahiert könntest du auch erst alle Strings hinzufügen und dann mit TStrings.Remove den Inhalt des Felds wieder entfernen (sofern die Combobox vorher leer ist, wovon ich ausgehe).
|
Re: If Anweisungen verkleinern
Habe nun:
Delphi-Quellcode:
Alleridngs kommt da: "Inkompatible Typen: Integer und TCustomerInfoSize"
type
TCustomerInfoSize = (ciKlein, ciMittel, ciGroß); . . . case Customer_Info[1,28,1] of ciKlein: begin ComboBoxFirmenG.Items.Add('Mittel'); ComboBoxFirmenG.Items.Add('Groß'); end; ciMittel: begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Groß'); end; ciGroß: begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Mittel'); end; end; |
Re: If Anweisungen verkleinern
Du hast dein array Customer-Info (wie das genau aussieht kann man ja nur raten, ich vermute mal hier wären records eh angebrachter als ein 3-Dimensionales array :gruebel: aber egal, in diesem array gibt es eine "Spalte" in der du offensichtlich die strings "Klein", "Mittel" und "Groß" speicherst.
Das machst du nun nicht mehr, sondern speicherst in dieser Spalte den Wert ciSmall usw. Und da es den Typ ciSmall noch nicht gibt, musst du ihn definieren, mit hilfe einer Enumeration. Syntax steht ja in meinem ersten Beitrag. Wie gesagt, höchstwahrscheinlich wäre aber sowas in der Art eh besser:
Delphi-Quellcode:
ist doch viel schöner, als ein 3-Dimensionales array, in dem auch noch alles unnötigerweise als string gespeichert wird ;)
TCustomerInfoSize = (ciSmall, ciMedium, ciLarge);
TCustomerInfo = record begin Size: TCustomerInfoSize; ... // deine sonstigen Customer Infos end; CustomerInfos = array of TCustomerInfo; |
Re: If Anweisungen verkleinern
Zitat:
|
Re: If Anweisungen verkleinern
Ich habe es so bis jetzt gehabt:
Delphi-Quellcode:
Wobei im Array
customer_info: array [0..10, 0..40] of string;
QueryCustomer.SQL.Text:='SELECT * FROM `'+Table_Info[5,1]+'` WHERE customer_company_name='''+FormMain.StringGridKunden.Cells[0,selectedRow]+''''; QueryCustomer.Open; for i := 0 to StrToInt(Table_Info[5,2]) - 1 do Customer_Info[1,i, 1] := QueryCustomer.Fields[i].Asstring; QueryCustomer.Close; [a,b] a = Die verschiedenen Tabellen Daten 1: Customer b = verschiedenen Einträge der Tabellen Habe es wieder in 2 Dimensional geändert, da 3 Dimensional überflüssig wurde und ich vergessen hatte es zu ändern. |
Re: If Anweisungen verkleinern
Schritt 0: Deklaration der Aufzählungstypen und eines Sets:
Delphi-Quellcode:
Schritt 1: Mapping von String auf den Aufzählungstyp, in Set aufnehmen
type
TSize = (ciKlein, ciMittel, ciGroß); TSizes = set of TSize; var Sizes: TSizes;
Delphi-Quellcode:
Schritt 2: ein, zwei oder drei Items der Stringlist hinzufügen
if Customer_Info[1,28,1] = 'Klein' then
Include(Sizes, ciKlein) else if Customer_Info[1,28,1] = 'Mittel' then Include(Sizes, ciMittel) else if Customer_Info[1,28,1] = 'Groß' then Include(Sizes, ciGroß);
Delphi-Quellcode:
if not (ciKlein in Sizes) then
ComboBoxFirmenG.Items.Add('Klein'); if not (ciMittel in Sizes) then ComboBoxFirmenG.Items.Add('Mittel'); if not (ciGroß in Sizes) then ComboBoxFirmenG.Items.Add('Groß'); |
Re: If Anweisungen verkleinern
wobei ich dann, aber wieder genauso viel Text besitze und der Code nicht wirklich kleiner geworden ist?
Oder Irre ich mich?
Delphi-Quellcode:
Denn es sollen ja die Items geadded werden die nicht im Feld "Customer_Info[1,28]" gespeichert sind.
ComboBoxFirmenG.Text := Customer_Info[1,28];
if Customer_Info[1,28] = 'Klein' then Include(Sizes, ciKlein) else if Customer_Info[1,28] = 'Mittel' then Include(Sizes, ciMittel) else if Customer_Info[1,28] = 'Groß' then Include(Sizes, ciGroß); if ciKlein in Sizes then Begin ComboBoxFirmenG.Items.Add('Mittel'); ComboBoxFirmenG.Items.Add('Groß'); End Else if ciMittel in Sizes then Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Groß'); End Else if ciGroß in Sizes then Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Mittel'); End Else Begin ComboBoxFirmenG.Items.Add('Klein'); ComboBoxFirmenG.Items.Add('Mittel'); ComboBoxFirmenG.Items.Add('Groß') End; Und somit habe ich wieder die nervigen If Anweisungen :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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