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:
  1. befindet sich in einem der Felder ein bestimmter Wert, soll eine Meldung erscheinen und weiter nichts.
  2. 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.
  3. 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 user profile iconTino: 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 - 1of 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, 2else inc(MyInteger, -2);
if Edit2.Text <> '' then  inc(MyInteger, 4else inc(MyInteger, -4);
if Edit3.Text <> '' then  inc(MyInteger, 8else inc(MyInteger, -8);
if Edit4.Text <> '' then  inc(MyInteger, 16else 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// Edit1 enthält Text
4// Edit2 enthält Text
8// Edit3 enthält Text
16// Edit4 enthält Text

6// Edit1 und Edit 2 enthalten Text
10// Edit1 und Edit3 enthalten Text

28// alle ausser Edit1 enthalten Text
end//case

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: