![]() |
Minuszeichen abfangen?
Hi zusammen
Ich glaub ich stehe momentan am schlauch. habe schon einiges :oops: gesucht aber leider kein vernünftige Lösung gefunden. Ich versuche gerade im onChange von einem TEdit StrToFloat(TEdit(Sender).Text) umzuwandeln. beim eingaben von einem Minuszeichen kommt logischerweise der Fehler. Ist ja noch kein Gleitkomma Wert. Solte aber nicht in einer anderen Procedur sein ( OnKeyPress oder so sondern nur im onChange ) Wie kann ich das verhindern? :gruebel: Tau :hi: |
Re: Minuszeichen abfangen?
1. Fehlermeldung mit try...finally abfangen und Wert auf 0.0 setzten, oder
2. Prüfungen erst bei vollständiger Eingabe vornehmen (OnExit) |
Re: Minuszeichen abfangen?
Hallo Grishnak
1) try...finally ist glaube ich nicht das gelbe vom ei es muss noch besser Lösungen geben. 2) Zitat:
Der Grund ist das ich diese Lösung auch für ein bar andere fälle brauchen würde. Hatte auch schon mal was im Forum gefunden aber kann es leider nicht mehr finden. Tau :hi: |
Re: Minuszeichen abfangen?
strtofloatdef koennte es eventuell geben
|
Re: Minuszeichen abfangen?
Die Exeption wird trotzdem ausgelöst
Tau :hi: |
Re: Minuszeichen abfangen?
Zitat:
|
Re: Minuszeichen abfangen?
strtofloatdef hat bisher immer funktioniert.
wenns immernoch crasht, dann liegts aber nicht an strtofloatdef. |
Re: Minuszeichen abfangen?
Hi,
auch wenn es nicht weit vom try ... except weg liegt (das eh für falsche Eingaben drum rum sollte), schau dir doch einfach den gesetzten Wert direkt an. Also beim OnChange mal was wie
Delphi-Quellcode:
if self.EditDasMichInteressiert.Text = '-' then
begin exit; end; // if self.EditDasDichInteressiert.Text = '-' try self.DeinFloatValue := StrToFloat(self.EditDasDichInteressiert.Text); except // oops end; |
Re: Minuszeichen abfangen?
strtofloatdef() versteht auch minuszeichen.
loest euch mal von den try-excepts, wenn die funktionen das selber schon ordentlich behandeln. |
Re: Minuszeichen abfangen?
wie wäre es mit "TryStrToFloat", das versteht optional auch + und - und gibt eine exception, falls doch etwas anderes als Ziffern eingegeben werden .
Chris |
Re: Minuszeichen abfangen?
@ripper8472: strtofloatdef hat aber doch den Nachteil das man nicht weiß ob es geklappt hat oder nicht da man ja im Fehlerfall den Defaultwert bekommt. Aber es kann ja auch sein das man den Defaultwert bekommt wenn alles klappt. Ich finde es nicht ganz so toll wenn man einfach dann mit einem Defaultwert rechnet und der User sich über das Ergebnis wundert, es ist einfach besser wenn man den user auf seine Fehleingabe hinweisen kann. Und wie schon jemand vor mir geschrieben hat kann man auch einfach vor dem StrToFloat prüfen ob das Edit aus mehr als einem Minuszeischen besteht.
Delphi-Quellcode:
if TEdit(Sender) <> '-' then
Variable := StrToFloat(TEdit(Sender).Text); |
Re: Minuszeichen abfangen?
Hallo,
du darfst das "-" Zeichen sowieso nur einmal zulassen und das am Anfang. Schau nach ob das "-" das einzige Zeichen ist, wenn das so ist lässt du die Umwandlung und tust einfach so als stände nichts im Edit-Feld. Rainer |
Re: Minuszeichen abfangen?
Sorry,
aber Thornberry hatte gleichzeitig mit mir die gleiche Idee. Rainer |
Re: Minuszeichen abfangen?
@Tau: 'try...finally' war Quatsch, ich meinte 'try...except'! Außerdem kann ich lesen, aber wenn es mit dem Kopf durch die Wand nicht geht, muss man halt auch mal einen anderen Weg beschreiten! Kein Grund unfreundlich zu werden!
|
Re: Minuszeichen abfangen?
Zitat:
|
Re: Minuszeichen abfangen?
das Abfragen beim ersten Zeichen ungleich - bringt doch nix, wenn jemand zwischendurch nen Buchstaben eingibt oder zwischendrin nen - krachts trotzdem.
also ich wuerde trystrtofloat nehmen, da wiesst du ob alles ok war und wenn nicht kannst du reagieren |
Re: Minuszeichen abfangen?
Hallo zusammen
@ SirThornberry das ist genau der richtige Ansatz für mich. D A N K E :witch: :witch: :witch: auch den anderen besten danke für die Interessanten Ansätze. Tau :hi: |
Re: Minuszeichen abfangen?
Generell hat auch
![]() Selbst was von TCostumEdit ableiten ist auch nicht wirklich schwer... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 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