Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zellinhalt eines StringGrid auf Inhalt prüfen


OliverN_26 - Di 25.12.07 12:41
Titel: Zellinhalt eines StringGrid auf Inhalt prüfen
Hi!

Habe ein StringGrid, in dem ich in 1 Spalte auch Werte verändern oder neu eingaben kann.
Wie kann ich "nach der Eingabe" prüfen, ob die Eingabe auch wirklich nur ein Wert ist (also 1234 ... 345,69 ... 300,1 ... 45677,00) und nicht "xyz" ... "hallo" oder sonstiges. Dachte mir das so in die Richtung "onChange", nur das gibts beim StringGrid nich :-(

Danke


Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 25.12.2007 um 16:55


Christian S. - Di 25.12.07 17:54

Hallo!

Du könntest z.B. das "OnEditingDone"-Ereignis verwenden.

Grüße
Christian


OliverN_26 - Di 25.12.07 19:19

"OnEditingDone" ???
Das klingt sehr verlockend, aber das hat mein StringGrid nicht als Ereignis ?!

MfG


Christian S. - Di 25.12.07 19:26

Oh, sorry, war zu faul die VM mit Delphi zu starten und hab kurz in Lazarus geguckt. Versuch's stattdessen mal mit ... äh ... OnSetEditText. Das wird allerdings bei jedem Tastendruck ausgelöst :?


OliverN_26 - Di 25.12.07 19:39

Genau das is das Problem. Ich hab in dem blöden StringGrid nur Ereignisse, die beim Betreten einer Zelle was machen, aber nich beim verlassen.

MfG


OliverN_26 - Di 25.12.07 21:48

Ok. Habs hinbekommen
Hab einfach nach jedem Tastendruck geprüft ob nur ',' und Zahlen, und ob vor ',' eine Zahl and am Ende kein ',', sondern eine Zahl ist.
Trifft irgendwas nicht zu, wird das entsprechende falsche Zeichen direkt aus dem Eingabefeld gelöscht.
Was anderes fällt mir nicht ein.

Es erfüllt seinen Zweck. Wer ne bessere Lösung hat darf mir die bitte mitteilen :-)

Danke trotzdem ...


Jerk - Di 25.12.07 22:46

Ich würde es so lösen, dass wenn man eine falsche Taste drückt, überhaut nichts geschrieben wird.

edit äh das is ja praktsich was du meinst -.- mein Fehler


DarkHunter - Mi 26.12.07 00:18

Ob die Lösung besser ist weiß ich nicht, jedoch ist es auf jeden Fall eine Alternative.

Man könnte im OnDrawCell ebenjene Bedingung prüfen und ggf. den Inhalt der Zelle auf Null/einen Standardwert setzen.
Damit wäre das Grid als Nebeneffekt beim Starten direkt mit dem Standardwert gefüllt.

Wobei ich mich Frage, ob man dabei nicht zu oft die Abfrage durchführt, weil das neuzeichnen der Zelle geschieht nicht gerade selten.