![]() |
Array, gleiche Werte zählen / Logikproblem.
Hi Leute !
Als erstes ein herzliches Hallo an die gesamte Community. Ich habe kürzlich mit Delphi angefangen ( vorher c++ und java ) und bin nun in ein Problem gerannt. Eigentlich geht es mehr um ein logisches Problem als um ein syntaxspezifisches... aber seht selbst. - Ich habe 14 Comboboxen. In diesen lassen sich verschiedene Werte auswählen. ( Freizeit, Schulden, KFZ, Sonstige Ausgaben, ... ) Wobei in jeder Combobox die gleichen Werte zur Verfügung stehen. Ich möchte nun mit einem Klick auf einen Button anzeigen lassen, Wieviele Positionen der 14 Comboboxen gleich sind. Sprich, wenn in 5 der 14 Comboboxen " Schulden " gewählt wurde, dann möchte ich anzeigen lassen können : SCHULDEN : 5 Ich würde das ja mit dem itemindex machen, aber ich komme gerade nicht weiter. Zur Erklärung noch dazu, links neben den 14 Comboboxen sind 14 Editboxen. In diese schreibt man dann z.B. eine Summe hinein ( z.B. was man neulich für Zigaretten ausgegeben hat ) und wählt dann daneben bei der Combobox treffenderweise "Freizeit" oder "Genussmittel". Am Ende will ich einfach nur angezeigt haben, wieviele der 14 Positionen unter welche Gruppe fallen. Was später noch dazukommt, dass die hinterlegten Summen ( ebenfalls 14 Editboxen ) pro Gruppe addiert werden. Einfach ausgedrückt, dass man weiß, wieviel Geld man z.B. insgesamt für Zigaretten ausgegeben hat. - es existiert ein Array[13] - dieses Array ist gefüllt mit itemindizes ( array[0] := combobox1.itemindex etc. etc. bis array[13] und combobox 14 ) Kann mir jemand weiterhelfen ? Viele Grüße, Andi |
Re: Array, gleiche Werte zählen / Logikproblem.
Außer der Tatsache, dass ich sowas in Excel machen würde/schonmal gemacht habe:
Benutze Bucketsort. Genauer: Erstelle ein Array mit sovielen Elementen wie in der Combobox auswählbar sind. Dann gehst du die Comboboxen durch und machst sowas: MyArray[ComboboxX.ItemIndex] := MyArray[ComboboxX.ItemIndex] + 1; Danach hast du in dem Array an jedem Index die Anzahl an Comboboxen stehen, in der dieser Eintrag ausgewählt ist ;) |
Re: Array, gleiche Werte zählen / Logikproblem.
Oder "live" bei der Änderungen einer ComboBox
|
Re: Array, gleiche Werte zählen / Logikproblem.
Hi und Willkommen,
das von jfheins erklärte ist die eine Option. Die andere ist, du definiert dir deine eigenen Typen als zB Konstanten.
Delphi-Quellcode:
zusätzlich haste die Variablen:
const
CONST_Schulden = 1; CONST_Ausgaben = 2; usw...
Delphi-Quellcode:
nun kannst du in einer Schleife dein Array abarbeiten.
var
CountSchulden: Integer; CountAusgaben: Integer; ....
Delphi-Quellcode:
Das nachher noch auf die Summe der Werte zu erweitern sollte nicht so schwer sein. Tip:
for i := 0 to High(Meinarray) do
begin case Meinarray[i] of CONST_SChulden: Inc(CountSchulden); CONST_Ausgaben: Inc(CountAusgaben); ... end; end;
Delphi-Quellcode:
type
meinrecord = record TypID: Integer; TypBezeichnung: String; Summe: Double; end; var WerteArray = array of meinrecord; Gruß Ansgar |
Re: Array, gleiche Werte zählen / Logikproblem.
Das mit Excel hat mein Bruder auch gesagt :D Aber dennoch,
das muss sich doch programmieren lassen in delphi, oder ? Wie soll das funktionieren ? Soll das X in comboboxX denn variabel sein ? Das klappt doch nicht. Sonst hätte ich mir vie lMphe ersparen können, wenn sowas wie Combobox[x].itemindex gehen würde. Ich will doch nur wissen und anzeigen lassen, wieviele Positionen man im Monat für welche Gruppe eingibt, und das dann addieren. Beispiel... Editboxen Editboxen Comboboxen Dacia Rate 250 KFZ Polo Rate 150 KFZ Schulden 400 SCHULDEN Zigaretten 4 GENUSSMITTEL Tanken 200 KFZ --------------------------------------- So, und am Ende hab ich dann ein paar Labels etc. die anzeigen sollen ( am besten größter Betrag zu erst ) : KFZ 600 SCHULDEN 400 GENUSSMITTEL 4 --------------------------------------- Ist das denn so hart zu programmieren ?! Oder häng ich einfach nur grad. |
Re: Array, gleiche Werte zählen / Logikproblem.
Zitat:
Delphi-Quellcode:
var Boxes: array[0..42] of TComboBox;
|
Re: Array, gleiche Werte zählen / Logikproblem.
-ComboBoxen in Array oder Liste
-<Form>.FindComponent() -"live" über Sender |
Re: Array, gleiche Werte zählen / Logikproblem.
Erstmal, vielen Dank für die schnellen Antworten. Bin absolut überrascht.
Was ich vielleicht dazusagen sollte.... Die Positionen in den Comboboxen sind erweiterbar. Die werden bei Programmstart aus einer Datei gelesen und lassen sich innerhalb des Programms auch erweitern. Wenn also jemand meint, er muss den Punkt "Computerspiele" dazumachen, dann fügt er ihn hinzu. Fortan ist dieser Punkt dann auch in der Combobox. Das ist ein Problem. Bei euren Lösungswegen wird eine feste Anzahl vorausgesetzt, oder ? |
Re: Array, gleiche Werte zählen / Logikproblem.
Zitat:
Such mal in der Delphihilfe oder hier in der DP nach "FindComponent". Das ist das was du suchst [edit] roter kasten fehlte...[/edit] Gruß Ansgar |
Re: Array, gleiche Werte zählen / Logikproblem.
Wie wäre es mit OOP? Edit: Wenn du vorher mit Java programmiert hast, dächte ich wäre dein erster Ansatz das auch weiterhin OO zu gestalten.
|
Re: Array, gleiche Werte zählen / Logikproblem.
Zitat:
|
Re: Array, gleiche Werte zählen / Logikproblem.
Zitat:
Als zweite Möglichkeit verzcihtest du einfach auf das Zusammenklickern und erstellst die Komponente einfach dynamisch (per Code) im Ereigniss FormCreate. Dann kannst du auch ein Array oder (besser) eine Liste verwenden. Zudem ist dann eine erweiterung recht leicht zu implementieren (wie Deddy schon schrieb). |
Re: Array, gleiche Werte zählen / Logikproblem.
Jetzt mal Q&D Cpy&Paste-Programming:
Delphi-Quellcode:
Es bietet sich natürlich ein Array und eine Schleife an ;)
var
Count: Array of Cardinal; begin setlength(Count, ComboBox1.ItemCount); Count[Combobox1.ItemIndex] := Count[Combobox1.ItemIndex] + 1; Count[Combobox2.ItemIndex] := Count[Combobox2.ItemIndex] + 1; Count[Combobox3.ItemIndex] := Count[Combobox3.ItemIndex] + 1; Count[Combobox4.ItemIndex] := Count[Combobox4.ItemIndex] + 1; Count[Combobox5.ItemIndex] := Count[Combobox5.ItemIndex] + 1; Count[Combobox6.ItemIndex] := Count[Combobox6.ItemIndex] + 1; Count[Combobox7.ItemIndex] := Count[Combobox7.ItemIndex] + 1; Count[Combobox8.ItemIndex] := Count[Combobox8.ItemIndex] + 1; Count[Combobox9.ItemIndex] := Count[Combobox9.ItemIndex] + 1; Count[Combobox10.ItemIndex] := Count[Combobox10.ItemIndex] + 1; Count[Combobox11.ItemIndex] := Count[Combobox11.ItemIndex] + 1; Count[Combobox12.ItemIndex] := Count[Combobox12.ItemIndex] + 1; Count[Combobox13.ItemIndex] := Count[Combobox13.ItemIndex] + 1; Count[Combobox14.ItemIndex] := Count[Combobox14.ItemIndex] + 1; end; P.S.: Nur weil man etwas in Delphi machen kann, heißt das nicht dass es die beste Lösung ist ;) |
Re: Array, gleiche Werte zählen / Logikproblem.
Der Spaghetticode funktioniert ja schonmal ganz gut :) Danke.
Jedenfalls kriege ich jetzt angezeigt, wie oft z.B. die Gruppe "KFZ" angewählt wurde. Fehlt eigentlich nurnoch das wichtigste. Die Summe der einzelnen gleichen Gruppenpositionen. Quasi... Editbx. Combobx. 250 KFZ 150 KFZ 400 SCHULDEN 4 GENUSSMITTEL 200 KFZ --------------------------------------- Am liebsten in ner Listbox oder ähnlichem : KFZ 600 SCHULDEN 400 GENUSSMITTEL 4 Aber woher soll delphi wissen, welche editbox zu welcher gruppe gehört :( |
Re: Array, gleiche Werte zählen / Logikproblem.
nun geht das geflicke richtig los... ;)
du könntest in dem Tag feld der comboboxen das dazu gehörende edit-feld speichern. z.B beim start einma für alle boxen sowas wie
Delphi-Quellcode:
später könnteste dann über
Combobox1.Tag := Integer(Edit1);
Delphi-Quellcode:
darauf zugreifen.
TEdit(Combobox1.Tag).Text
ich kann zwar nicht grad behaupten, dass ich diese lösung sinderlich schön finde, funktionieren sollte sie aber für den hausgebrauch! |
Re: Array, gleiche Werte zählen / Logikproblem.
Wie geht das mit TEdit(Combobox1.Tag).Text ?
Ich hab einfach mal bei form create Combobox1.Tag := Integer(Edit18); eingefügt. und dann ? wie komm ich an die Werte ? |
Re: Array, gleiche Werte zählen / Logikproblem.
du hast es doch grad selber geschrieben :)
anzeigen z.B. so:
Delphi-Quellcode:
bzw du willst damit ja rechnen...
showmessage(TEdit(Combobox1.Tag).Text)
dann kannste sowas wie
Delphi-Quellcode:
machen
TryStrToFloat(TEdit(Combobox1.Tag).Text, .....
|
Re: Array, gleiche Werte zählen / Logikproblem.
Spitze ! Vielen vielen Dank !
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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