Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - viele IF-Anweisungen --> elegantere (bessere) Lösung ???
elduchte - Mo 23.06.03 00:21
Titel: viele IF-Anweisungen --> elegantere (bessere) Lösung ???
Hallo Leute,
ich habe mal ein Frage: Ich habe neun Eingabefelder. Nachdem ich in jedem Feld ein Wert eingegeben habe, klicke ich auf einen Button. Jetzt soll folgende Überprüfung stattfinden:
- befindet sich in einem der Felder ein bestimmter Wert, soll eine Meldung erscheinen und weiter nichts.
- ist dies nicht der Fall soll überprüft werden, ob in 2 von den neun Felder jeweils ein bestimmter Wert steht, auch dann --> Meldung und sonst nichts.
- sind o. g. Punkte nicht zutreffend, will ich eine Berechnung durchführen.
Dieses Problem kann ich mit unzähligen IF-Anweisungen durchführen, allerdings halte ich das nicht für wirklich "elegant".
Gibt es da nicht auch eine bessere Lösung, die selbst ein Anfänger versteht?
Vielen Dank für Eure Hilfe
Andreas
Moderiert von
Tino: List-Tags hinzugefügt.
AndyB - Mo 23.06.03 02:07
Du kannst die Methode FindComponent des Formulars benutzen, auf dem die Komponenten sind (MeineSelbstdefinierteForm.FindComponent kann nur Komponenten finden, die als Owner "MeineSelbstdefinierteForm" haben)
Delphi-Quelltext
1: 2: 3: 4: 5:
| for Zahl := 0 to Anzahl - 1 do begin MyEdit := (FindComponent('Name' + IntToStr(Zahl)) as TEdit; if MyEdit.Text = 'a' then ... end; |
Oder du schreibst die Edits in ein Array:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var Edits: array[0..Anzahl - 1] of TEdit; begin Edits[0] := EditStart; Edits[1] := EditEnd; Edits[2] := ... ... end;
begin for Zahl := 0 to Anzahl - 1 do if Edits[Zahl].Text = 'a' then ... end; |
kiwicht - Mo 23.06.03 07:44
Hallöle..
hab auch ne Möglichkeit:
myInteger : Integer;
jetzt als Ereignis auf jeweils die 8 Edit-Felder, und zwar bei "OnExit"
Delphi-Quelltext
1: 2: 3: 4: 5:
| if Edit1.Text <> '' then inc(MyInteger, 2) else inc(MyInteger, -2); if Edit2.Text <> '' then inc(MyInteger, 4) else inc(MyInteger, -4); if Edit3.Text <> '' then inc(MyInteger, 8) else inc(MyInteger, -8); if Edit4.Text <> '' then inc(MyInteger, 16) else inc(MyInteger, -16); [...] usw |
dann fragst du bei ButtonClick in einer Case-Abfrage myInteger ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| case myInteger of: 2: 4: 8: 16: 6: 10: 28: end; |
so. Fertig
Prinzip verstanden? ist zwar vielleicht genauso lang wie deine IF-Abfragen, sieht aber unheimlich clever aus ;)
mfG
BeniSchindler - Di 24.06.03 11:32
sieht verdammt klever aus hat jedoch einen Fehler. ;) Den wenn blos in Edit2 ein Wert drin steht, ist der Wert "MyInteger" nicht bei 2 sondern bei -376 (oder so) . Man sollte also in jeder Zeile das Else weglassen. "else inc(MyInteger, -2); ". Und dann stimmt das ganze wieder so wie du das geschrieben hast.
ich würde das ganze auch wie AndyB veranstalten.
lb - Mo 14.07.03 23:07
Titel: zu Andy B
Die Sache mit den Edits als Array funtkioniert bei mir nicht so ganz.
Nenne ich die Variable
var
Edits : Array[0..5] of TEdit;
Dann muss ich doch zumindest mit TEdit.Create die Edits erzeugen. Mache ich dass, so werden Sie zwar erzeugt, sind jedoch mirgends auf meiner Form zu sehen! Auch wenn ich Edits[0].visible := True, ..., setzte!
Wie bekomme ich die Edits auf meiner form zur Erscheinung?
Wolff68 - Mo 14.07.03 23:48
Du musst den Edits noch mitteilen, WO sie erscheinen sollen.
Sprich, die brauchen ein Übergeordnetes Element .Parent
Nach einem Edit[n].Parent := Form1; sollten die Edits auch erscheinen.
(Netter weise erst mal alle übereinander... Musst halt auch noch positionieren...)
Popov - Di 15.07.03 00:04
Das ist ein drei Wochen alter Beitrag. Hätte der Frager Interesse an weiteren Vorschlägen, dann hätte er sich noch mal gemeldet ;)
Also nicht zu viel Mühe machen. Eigentlich hab ich auch schon ein Beispielcode geschreiben bis ich merkte, daß sein Programm wahrscheinlich schon längst fertig ist.
Wolff68 - Di 15.07.03 14:11
Ups, hatte gar nicht auf das Datum geachtet.
Nun, aber vielleicht benutzt ja doch mal jemand die Suchfunktion und findet diesen Thread (OkOk. Träumen darf man ja, oder?)
lb - Mi 16.07.03 22:24
Titel: Danke
Vielen Dank,
Wolf68, jetzt funktioniert es! Auch wenn dieser Beitrag 3 Wochen alt ist, mich hat das mit den Arrays von Edits interresiert. Ich wusste, in VB kann man das machen, jedoch nicht wie das in Delphi geht.
Terra23 - Mi 16.07.03 22:43
Verkehrte Welt, hä? Das ist echt lustig. Eine(r) eröffnet einen Beitrag und ein(e) andere(r) bedankt sich. :rofl:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!