![]() |
SpinEdit MinValue
Hi
Ich verstehe nicht, warum ich 0 in SpinEdit eintippen kann, obwohl SpinEdit.MinValue=1 Nur wenn SpinEdit1 den Focus verliert, dann wird der Value von 0 zu 1 verändert Ich darf in SpinEdit kein 0 eintippen. Ich habe versucht inEvent Onchange :
Delphi-Quellcode:
Trotzdem bekomme ich Fehler ! wenn ich 0 eintippe oder den Wert in SpinEdit1 lösche !
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin if (SpinEdit1.Value>0) and (SpinEdit1.Text<>'') then begin SpinEdit2.Text:=IntToStr(Trunc(x / SpinEdit1.Value)); end else begin exit; end; end; |
AW: SpinEdit MinValue
Was zum Teufel programmierst du denn da? Hast du dir deinen Quellcode schon mal durchgelesen? :roll: Langsam wirds echt lustig mit dir...
Wenn ein User etwas eintippt kann nicht live geprüft werden, ob der eingegebene Wert korrekt ist. Das ist erst bei der OnExit-Methode möglich. Daher kann ein User auch eine 0 eingeben! Stell dir mal vor, du beschränkst das SpinEdit auf das Interval [3-20] und der User will 20 eingeben, dann würde schon bei der Eingabe der 2 sein Wert korrigiert werden. Alternativ könntest du dir mal die Property EditorEnabled anschauen. |
AW: SpinEdit MinValue
OnExit-Methode funktioniert Ohne Fehler. Das ist eine Lösung, wenn es nicht möglich ist, Online (Onchange) die Werte zu berechnen
Ich möchte die Änderung Live sehen Onchange und nicht nur wenn ich ausserhalb wo anderes zu klicken ! |
AW: SpinEdit MinValue
Hast du überhaupt gelesen, was ich dir geschrieben habe? Den Eindruck macht es jedenfalls keineswegs... Du wirst doch wohl nicht glauben, dass dir die Mitglieder hier auf die Dauer noch viel helfen werden, wenn du schon das ignorierst was da steht. Ein wenig darüber nachdenken, was da steht und warum ein SpinEdit so funktioniert, wie es funktioniert, würde schon nicht schaden. Ich habe dir ja auch einen Lösungsweg beschrieben, der dich sichtlich gar nicht interessiert. Passt dir daran irgendwas nicht? Oder wo liegt denn bitte das Problem?
|
AW: SpinEdit MinValue
Alles was ich machen wollte ist folgendes
Delphi-Quellcode:
Ich möchte unbedingt Live die Werte berechnen und nicht OnExit
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin if (SpinEdit1.Text='') or (SpinEdit1.Value<1) then begin ShowMessage('Bitte einen Wert von 1 bis 10000 eingeben'); end else begin bla bla :? |
AW: SpinEdit MinValue
Das geht nicht, wenn du dem User erlaubst via Tastatur Werte einzugeben! Nochmals schreibe ich das nicht hin. Der Grund, warum es nicht geht steht weiter oben. Ich habe dir auch eine Property genannt mit der du dem User verbieten kannst Werte direkt einzugeben. Er muss daher die Pfeiltesten (Tastatur) nutzen oder eben die Pfeil-Button mit der Maus klicken.
Oder du überlegst dir einfach, ein komplett anderes Control zu nutzen! Wenn es sich um dein Scale-Dialog handelt sollte auch folgende Lösung funktionieren: du kannst beim OnChange prüfen, ob der eingegebene Werte korrekt ist. Wenn ja, dann lass den Ok- bzw. Übernehmen-Button aktiviert (Enabled = True), ansonsten setze Enabled bei ungültigen Werten auf False. So kann der User nie eine Aktion ausführen, die die fehlerhafte Daten vorliegen. |
AW: SpinEdit MinValue
Haie sind bissig!
Probier mal folgendes
Delphi-Quellcode:
Edit: Doch im Grunde hat der Hai recht!
if SpinEdit.Value < SpinEdit.MinValue then
SpinEdit.Value := SpinEdit.MinValue else if SpinEdit.Value > SpinEdit.MaxValue then SpinEdit.Value := SpinEdit.MaxValue; |
AW: SpinEdit MinValue
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Muss er 199 mals die Pfeil-Taste drücken :| Zitat:
Zitat:
Hier ist zum Beispiel von einem anderen Programm, wenn ich 0 eingebe Zitat:
|
AW: SpinEdit MinValue
Du wirst kaum verhindern können, dass der Anwender eine Null eintippt, weil Du nicht wissen kannst, ob daraus vielleicht ein "03" wird. Das Einzige, was Du tun kannst, ist, später in Deiner Verarbeitung auf die Null (nicht) zu reagieren, indem Du in diesem Fall intern mit einer "1" oder einem anderen sinnvollen Wert weiterrechnest. Spätestens im OnExit-Ereignis wird die GUI ja wider glatt gezogen.
Im OnChange-Ereignis könntest Du bei einem Wert, der nicht dem gewünschten Wertebereich entspricht, das Eingabefeld anders färben. Sobald Du aber anfängst, den eingegebenen String im OnChange-Ereignis zu verändern, wirst Du den Anwender in 9 von 10 Fällen verärgern, weil Du nicht vorhersehen kannst, was er eigentlich wollte und daher keine Korrektur in seinem Sinne vornehmen kannst. |
AW: SpinEdit MinValue
Man könnte auch ein UpDown nehmen, der Wertebereich von SmallInt sollte hier reichen.
Im assoziierten Edit-OnChange prüft man mit TryStrToInt ob die Eingabe im Werte-Bereich ist und aktualisiert UpDown.Position. Die Live-Anzeige wird nur im UpDown.OnChanching ausgelöst.
Delphi-Quellcode:
Wichtig ist in der Combo die Unabhängigkeit der Ereignisse, wobei die Abhängigkeit der unabhängigen Komponenten abhängig von der Anwendung, unschön ist, ganz unabhängig vom Nutzen der Methode. ;)
procedure TForm1.UpDown1Changing(Sender: TObject;
var AllowChange: Boolean); begin Label1.Caption := IntToStr(UpDown1.Position); end; procedure TForm1.Edit1Change(Sender: TObject); var i : Integer; begin if TryStrToInt((Sender as TEdit).Text, i) then begin if (i >= UpDown1.Min) and (i <= UpDown1.Max) then UpDown1.Position := i; end; end; €: Oder man leitet vom SpinEdit ab und publiziert ein OnTextChange-Ereignis bzw. bastelt sich da ein Live-Update von Value rein, dann hat man wieder alles in einer Hand. PS: Ich glaube der TS muss die ganzen Antworten übersetzen, weshalb wohl ein Teil der Antworten einfach untergeht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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