Autor Beitrag
MilKeeway
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.11.09 02:59 
Heyy

hab ein Problem. Ich hab ein Programm zur Flächenberechnung. Nun kann man in den Labelededit Feldern die Länge der Maße eingeben, auf den Button klicken und der rechnet das dann aus.
Wenn man ein Feld vergisst kommt eine MessageBox wo drinnen steht: '' ist kein gültiger Gleitkommawert.

Nun möchte ich nicht 20mal reinschreiben
ausblenden Delphi-Quelltext
1:
2:
3:
if lblx.Text:='' then
Application.MessageBox (bla, bla, 16);
exit;


Also ich möchte, falls eines oder mehrere Felder leer sind, das eine MessageBox kommt und ich nicht immer den oben genannten Code verwenden muss.

HOffe ihr versteht was ich meine :D

schon mal danke :)


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 02.11.2009 um 14:42
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Mo 02.11.09 03:08 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
If (lbl1.Text = ''or
   (lbl2.Text = ''or
   (lbl3.Text = ''or
   ...
   (lblx.Text = ''then
 begin 
  Application.MessageBox (bla, bla, 16);
  Exit;
 end;

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 02.11.09 03:37 
user profile iconMilKeeway hat folgendes geschrieben Zum zitierten Posting springen:
Also ich möchte, falls eines oder mehrere Felder leer sind [...]
Und was machst du, wenn jemand reinschreibt 'abc'? Wie wäre es, wenn du lieber schaust, ob da eine Zahl drinsteht?

Und dann ist es äußerst ungünstig, wenn du deinen Quelltext unnötig kryptisch schreibst. Wie lange kannst du wohl mit der Zahl 16 etwas anfangen? Schreib das doch lieber lesbar hin...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if not (TryStrToFloat(lblSideA.Text, SideA) 
  and TryStrToFloat(lblSideB.Text, SideB)
  and TryStrToFloat(lblSideB.Text, SideB)) then
begin
  Application.MessageBox(bla, bla, MB_ICONERROR or MB_OK);
  Exit;
end;
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Mo 02.11.09 09:12 
user profile iconMilKeeway hat folgendes geschrieben Zum zitierten Posting springen:

Nun möchte ich nicht 20mal reinschreiben
ausblenden Delphi-Quelltext
1:
2:
3:
if lblx.Text:='' then
Application.MessageBox (bla, bla, 16);
exit;




Zur Lösung des Problems führt wenn Du erstmal das hervorgehobene Zeichen entfernst.

Um jetzt nicht für jedes Edit Element eine Prüfung auf leer oder ungültig einzeln zu schreiben kannst Du in einem Array Verweise auf die jeweiligen Edits hinterlegen. Bei der Prüfung iterierst Du dann das Array durch und kannst so für alle Edits die Prüfung machen. Wenn ein zusätzliches Edit geprüft werden soll, so must Du dieses nur dem Array anfügen.

Anstatt eines Array können natürlich auch andere Strukturen genutzt werden.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mo 02.11.09 09:34 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure pruefeAufZahlenEingabe(Sender: TEdit);
var aValue : double;
begin
 if not (Sender.Text = ''then                  // Zahlenfeld leer?
 begin
  if not TryStrToFloat(Sender.Text, aValue) then // Eingabe in Gleitkommazahl konvertierbar?
   Sender.Text := '0';                           // wenn nicht, eine 0 reinschreiben
 end
 else
  Sender.Text := '0';                            // wenn leer, immer eine 0 reinschreiben
end;


Jedes Eingabefeld für Zahlen wird mit '0' in der Eigenschaft 'Text' im Objektinspektor vorbelegt

bei jedem Eingabefeld im 'OnExit' einfach
ausblenden Delphi-Quelltext
1:
 pruefeAufZahlenEingabe(DeinEditFeldName);					


Zur Laufzeit ist dann immer eine 0 oder eine gültige Zahleneingabe im Editfeld

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
MilKeeway Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 02.11.09 15:08 
Danke an euch (:

Hab jetzt den IF Code von Platzwart verwendet und die MB-Buttons von Jaenicke.

@ Jaenicke: Ich hab ein KEyPress Ereignis geschrieben dass man nur Zahlen, Komma und - eingeben kann. Also ist es gar nicht möglich Buchstaben einzugeben.

danke nochmal :)
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Mo 02.11.09 21:44 
user profile iconMilKeeway hat folgendes geschrieben Zum zitierten Posting springen:
Danke an euch (:

Hab jetzt den IF Code von Platzwart verwendet und die MB-Buttons von Jaenicke.

@ Jaenicke: Ich hab ein KEyPress Ereignis geschrieben dass man nur Zahlen, Komma und - eingeben kann. Also ist es gar nicht möglich Buchstaben einzugeben.

danke nochmal :)


Hast Du geprüft, dass dadurch auch Strg+V abgefangen wird?
MilKeeway Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 04.11.09 15:47 
jaa hab ich. Eingaben können nur in Form von Zahlen gemacht werden (:

bin jetzt auch fast fertig, muss nur noch die restlichen Codes fertigschreiben und dann kanns mein Vater benutzen :D