Zahleneingabe

Soll der Benutzer eine Zahl eingeben, gibt es dafür zwei Möglichkeiten.

Als Aufforderung über eine Inputbox

  1. Dim Zahl
  2. Zahl = Inputbox("Geben Sie eine Zahl ein!","Eingabe")
  3. msgbox Zahl

über einen FF-Dialog mit dem Steuerelement SLEDIT

  1. Dim Zahl
  2.  
  3. '** Start Dialog Eingabe **
  4. FF_AddDialog "Eingabe",101,42
  5. FF_AddControl "Eingabe","Geben Sie eine Zahl ein!","STATIC",5,5,60,11
  6. FF_AddControl "Eingabe","Zahl","SLEDIT",67,5,20,11
  7. FF_AddControl "Eingabe","Auswertung","BUTTON",60,24,33,11
  8. '** End Dialog Eingabe **
  9.  
  10. do
  11. Select Case FF_ShowDialog ("Eingabe")
  12. Case "Auswertung"
  13. Zahl = FF_GetControl ("Eingabe","Zahl")
  14. msgbox Zahl
  15. exit do
  16. Case "CANCEL"
  17. exit do
  18. Case Else
  19. End Select
  20. loop
  21.  
  22. FF_CloseDialog ("Eingabe")

In beiden Fällen können verschiedene Probleme auftreten:

  • Es wird abgebrochen ohne eine Zahl einzugeben
  • Es wird "nichts" eingegeben
  • Der eingegebene Wert ist keine Zahl

Zahleneingabe über Inputbox

Wenn man die Eingabe einer Zahl erzwingen will, eignet sich dafür eine Schleife, die erst verlassen wird, wenn ein Wert, der sich als Zahl auswerten lässt, eingegeben wurde. Die Prüfung mit IsNumeric ist auch true, wenn die Inputbox mit Abbrechen beendet oder "nichts" (Nothing) eingegeben und dann OK betätigt wird. Daher muss zusätzlich geprüft werden, ob das Ergebnis <> "" ist.

  1. Dim Zahl
  2. Do
  3. Zahl = Inputbox("Geben Sie eine Zahl ein!","Eingabe")
  4. if IsNumeric(Zahl) and Zahl <> "" then exit do
  5. msgbox "Es muss eine Zahl eingegeben werden!",vbInformation,"Hinweis"
  6. loop
  7. Zahl = Zahl *1
  8. msgbox Zahl

Da das Ergebnis eine Textvariable ist (z.B. würde 05 ein gültiges Ergebnis sein), muss es noch durch die Multiplikation mit 1 zu einer echten Zahl umgewandelt werden.

Zahleneingabe über FF-Dialog mit dem Steuerelement SLEDIT

Indem man dem Steuerelement SLEDIT den Stil ES_Number zuweist (FF_SetControlStyle "Eingabe","Zahl",8192), kann man verhindern, dass andere Zeichen als Ziffern eingegeben werden können. Gleichzeitig wird allerdings auch die Eingabe auf positive Ganzzahlen eingeschränkt, aber damit kommt man meistens aus.

  1. Dim Zahl
  2.  
  3. '** Start Dialog Eingabe **
  4. FF_AddDialog "Eingabe",101,42
  5. FF_AddControl "Eingabe","Geben Sie eine Zahl ein!","STATIC",5,5,60,11
  6. FF_AddControl "Eingabe","Zahl","SLEDIT",67,5,20,11
  7. FF_SetControlStyle "Eingabe","Zahl",8192
  8. FF_AddControl "Eingabe","Auswertung","BUTTON",60,24,33,11
  9. '** End Dialog Eingabe **
  10.  
  11. do
  12. Select Case FF_ShowDialog ("Eingabe")
  13. Case "Auswertung"
  14. Zahl = FF_GetControl ("Eingabe","Zahl")
  15. if Zahl <> "" then
  16. Zahl = Zahl *1
  17. msgbox Zahl
  18. exit do
  19. end if
  20. msgbox "Es muss eine Zahl eingegeben werden!",vbInformation,"Hinweis"
  21. Case "CANCEL"
  22. exit do
  23. Case Else
  24. End Select
  25. loop
  26.  
  27. FF_CloseDialog ("Eingabe")

Durch Anwendung des Stils ES_Number braucht bei der Gültigkeitsprüfung nur noch auf "nichts" (Nothing) geprüft zu werden. Allerdings ist auch hier das Ergebnis eine Textvariable, die erst durch Multiplikation mit 1 zu einer Zahl wird.

Zusatzanmerkungen

  • Es kann sinnvoll sein, dem Ergebnis "" die Zahl 0 zu zuweisen.
  • Der Vergleich if Zahl <> "" then kann ersetzt werden durch if len(Zahl) > 0 then. Dieser Vergleich ist lt. Werner schneller.