Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Richtige Fallunterscheidung (https://www.delphipraxis.net/155135-richtige-fallunterscheidung.html)

Zuckerberg 10. Okt 2010 16:32

Richtige Fallunterscheidung
 
Hallo Liebe Community,

nun komm ich zu einer Frage die ich mir oft stelle,
nämlich wie ich die richtige Fallunterscheidung mache damit mein Programm nicht abstürzt...

und zwar habe ich ein Edit und möchte mit dessen Inhalt weiter arbeiten,jedoch als Integer( strtoint, das ist nicht das Problem :wink:)

Das Problem ist:

1. wenn der Benutzer NICHTS eingibt, wie erkläre ich das dem Programm ?? mit if ... aber wie richtig also ich würde es so machen und es klappt nicht :
Delphi-Quellcode:
procedure TGUI.Button1Click(Sender:TObject);
begin
   if (Edit1.Text = '') then
   ShowMessage(Bitte geben sie eine Zahl ein !);
   // Gibts eig einen Befehl der die procedure anhählt oder beendet?
   // wäre an dieser eig angebracht also jetzt nicht bei so einen  
   // einfachen Beispiel, aber bei komplexeren angelegenheiten ...
   else
   ...
end;
2.Wenn der Benutzer keinen Integer eingibt sondern einen String ; oder beides gemischt also da würde ich folgendes tun:

Delphi-Quellcode:
procedure TGUI.Button1Click(Sender:TObject);
begin
   if (Edit1.Text = ???) then // hier bräuchte ich einen Tipp
   ShowMessage(Bitte geben sie eine Zahl ein !);
   // Gibts eig einen Befehl der die procedure anhählt oder beendet?
   // wäre an dieser eig angebracht also jetzt nicht bei so einen  
   // einfachen Beispiel, aber bei komplexeren angelegenheiten ...
   else
   ...
end;
Danke für die Hilfe

Zuckerberg

xZise 10. Okt 2010 16:36

AW: Richtige Fallunterscheidung
 
Guck mal nach Delphi-Referenz durchsuchenTryStrToInt. Weil dein Problem hat nicht so viel mit Fallunterscheidung zu tun, bzw. wenn man da nicht auf diese Methode zurückgreift, wird das schon etwas komplexer.

Übrigens, um eine Methode Anzuhalten kannst du Delphi-Referenz durchsuchenSleep() oder DelayDelay verwenden.

MfG
Fabian

nachti1505 10. Okt 2010 16:38

AW: Richtige Fallunterscheidung
 
StrToInt mit try/except umgeben oder gleich TryStrToInt nutzen... alternativ lässt du im Edit nur Ziffern zu.

generic 10. Okt 2010 16:40

AW: Richtige Fallunterscheidung
 
Ich selbst arbeite gerne mit eigenen Exceptions und Schutzblöcken.
Abhängig von der Exception kannst du dann reagieren.

Du kannst damit natürlich z.b. strtoint nutzen um die Eingabe zu validieren, da die Exception gefangen wird.

Teekeks 10. Okt 2010 16:43

AW: Richtige Fallunterscheidung
 
Zitat:

Zitat von Zuckerberg (Beitrag 1054893)
Gibts eig einen Befehl der die procedure anhählt oder beendet?

Nennt sich exit; (aus der Procedure/Function rausspringen) oder auch break; (aus der aktuellen Schleife rausspringen)

Luckie 10. Okt 2010 16:45

AW: Richtige Fallunterscheidung
 
alternativ kann man die Oberfläche auch so gestalten, dass ein weiterarbeiten nur möglich ist, wenn die Eingabe korrekt ist. Also Schaltflächen nur aktivieren, wenn im Eingabefeld was drin steht oder so.

Zuckerberg 10. Okt 2010 16:45

AW: Richtige Fallunterscheidung
 
Danke erstmal

nur was macht TryStrtoInt genau ??
brauch ich dabei keine if Abfrage mehr ?

und wie kriegt man es hin das im Edit nur Zahlen zugelassen werden ?

mkinzler 10. Okt 2010 16:46

AW: Richtige Fallunterscheidung
 
Was der Name sagt: Es versucht einen String in einen Integer zu wandeln und gibt zurück, ob die Wandlung erfolgreich war

DeddyH 10. Okt 2010 16:48

AW: Richtige Fallunterscheidung
 
TryStrToInt (eine schöne Gelegenheit, die Delphi-Referenz einmal vorzustellen *g*)

Luckie 10. Okt 2010 16:49

AW: Richtige Fallunterscheidung
 
Frage eins: Delphi Hilfe. Frage zwei: Forensuche.

Zuckerberg 10. Okt 2010 16:49

AW: Richtige Fallunterscheidung
 
Danke vielmals ihr alle ward meine Rettung:thumb:

Zuckerberg 10. Okt 2010 17:03

AW: Richtige Fallunterscheidung
 
entweder ich bin zu blöd oder es gibt bei trystrtoint einen hacken ...

also ich habe folgendes geschrieben bekomme aber eine Fehlermeldung:

Delphi-Quellcode:
if TryStrToInt(Edit1.Text) = False then //undefenierter Bezeichner trystrtoint
...
und wenn ich das schreibe kommt:

Delphi-Quellcode:
if Try(strtoint(Edit1.Text)) = false then // erwartet er ":="
...

Luckie 10. Okt 2010 17:08

AW: Richtige Fallunterscheidung
 
Guck dir in der Hilfe mal an, wie ein try-execept-Block aussieht.

DeddyH 10. Okt 2010 17:14

AW: Richtige Fallunterscheidung
 
Ist die Unit SysUtils eingebunden? Außerdem fehlt da ein Parameter.
Zitat:

Delphi-Quellcode:
function TryStrToInt(const S: string; out Value: Integer): Boolean;


Zuckerberg 10. Okt 2010 17:21

AW: Richtige Fallunterscheidung
 
Zitat:

Zitat von DeddyH (Beitrag 1054910)
Ist die Unit SysUtils eingebunden? Außerdem fehlt da ein Parameter.

JA !

bei mir gibts diese function trystrtoint überhaupt gar nicht -.-
ich nutze Delphi 5 !

naja ich versuch es grad mit dem try - except block jedoch muss
bei
dem ON bereich sowas wie EDividebyZero rein ...

Mein Problem ist wenn im edit kein Integer steht wie heißt der "E-Befehl dazu" ??

stahli 10. Okt 2010 17:28

AW: Richtige Fallunterscheidung
 
StrToIntDef könnte auch helfen...

mkinzler 10. Okt 2010 17:34

AW: Richtige Fallunterscheidung
 
Dann weiss man aber nicht unbedingt, ob der wert korrekt war ( wenn die Eingabe dem Default entsprochen hat)

Luckie 10. Okt 2010 17:34

AW: Richtige Fallunterscheidung
 
Zitat:

Zitat von Zuckerberg (Beitrag 1054911)
Mein Problem ist wenn im edit kein Integer steht wie heißt der "E-Befehl dazu" ??

Probiere es aus. Der Debugger zeigt dir die geworfene Exception an.

Teekeks 10. Okt 2010 17:35

AW: Richtige Fallunterscheidung
 
Du brauchst nicht unbedingt ein ON-Bereich.
wenn du einfach nur
Delphi-Quellcode:
try
//...
except
//irgendwie abbrechen
end;
schreibst, wird der except-Block bei jedem Fehler angesprungen der im try-Block entsteht, egal welcher.

mkinzler 10. Okt 2010 17:36

AW: Richtige Fallunterscheidung
 
Die TryStrTo<Typ>()-Variante würde ich aber vorziehen

Sir Rufo 10. Okt 2010 17:44

AW: Richtige Fallunterscheidung
 
Aber wenn er die Funktion nicht hat?

Keine Arme, keine Kekse

Teekeks 10. Okt 2010 17:45

AW: Richtige Fallunterscheidung
 
Ich auch, aber die scheint es ja nicht zu geben bei Delphi5...

Redbox: naja, egal. Ich schreib es trotzdem :)

mkinzler 10. Okt 2010 17:47

AW: Richtige Fallunterscheidung
 
http://www.delphipraxis.net/99012-er...ystrtoint.html

Zuckerberg 10. Okt 2010 17:55

AW: Richtige Fallunterscheidung
 
Danke Schön :-D:-D:-D:thumb::thumb::thumb:

so viele verschiedene Möglichkeiten ich werde versuchen sie alle unterzubringen :wink:

Teekeks 10. Okt 2010 18:30

AW: Richtige Fallunterscheidung
 
Besser nur eine einzige nutzen, nämlich die von mkinzer!
Also selber die Funktion Definieren.

xZise 13. Okt 2010 09:39

AW: Richtige Fallunterscheidung
 
Moin,
wäre praktisch wenn du irgendwo erwähnst das du Delphi 5 verwendest. Ich hätte zwar nicht gewusst, ob Delphi 5 wirklich kein TryStrTo* hat, aber andere vielleicht :cyclops:

MfG
Fabian

Sir Rufo 13. Okt 2010 09:42

AW: Richtige Fallunterscheidung
 
Zitat:

Zitat von xZise (Beitrag 1055490)
Moin,
wäre praktisch wenn du irgendwo erwähnst das du Delphi 5 verwendest. Ich hätte zwar nicht gewusst, ob Delphi 5 wirklich kein TryStrTo* hat, aber andere vielleicht :cyclops:

MfG
Fabian

Ja das wäre schön, wenn man die verwendete Delphi-Version am Profil hinterlegen könnte, aber das ist ja leider noch nicht erfunden :mrgreen:

DeddyH 13. Okt 2010 09:44

AW: Richtige Fallunterscheidung
 
Zitat:

Zitat von Sir Rufo (Beitrag 1055492)
Ja das wäre schön, wenn man die verwendete Delphi-Version am Profil hinterlegen könnte, aber das ist ja leider noch nicht erfunden :mrgreen:

Ja, dagegen sollte mal was unternommen werden *g*

xZise 14. Okt 2010 19:08

AW: Richtige Fallunterscheidung
 
Ähr wieso ?

MfG
Fabian

Satty67 14. Okt 2010 19:37

AW: Richtige Fallunterscheidung
 
Ein Ironie-Tag gleich mit dazu erfinden ;)

Also bei der Anmeldung im Forum gehört die Angabe der Delphi-Version gleich als Eingabefeld mit rein. Weiterhin freiwillig, aber da gäbe es die Chance, dass öfter die wichtigste Profil-Angabe auch mal ausgefüllt wird.

-Phantom- 15. Okt 2010 01:10

AW: Richtige Fallunterscheidung
 
Zu den Zahlen:

Also ich weiß nicht genau ab welcher Version das dabei ist, aber ich kann in Delphi 2010 die Einstellung einstellen "NumbersOnly", diese Funktion würde auch dein anders Problem lösen, denn man kann nicht "nichts" eingeben ( also mehrere Leerzeichen hintereinander ). Und weil man dann höchstens nur ein Leerzeichen eingeben kann, kann man die Abfrage benutzen:
Delphi-Quellcode:
if edit1.text = '' then
showmessage('Bitte eine Zahl eingeben')
// In Delphi 7 ist es noch nicht dabei.
// Habe nicht gelesen das er Delphi 5 Benutz -.- aber egal. Für die anderen ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz