Im Formular sind 16 Textboxen, in die nur eine numerischer Wert eingegeben darf, da die Daten anschließend in einer Access-Datenbank gespeichert werden sollen. Allerdings meckert Visual Basic ja bekanntlich, wenn man einen String oder einfach „“ in ein numerisches Feld einer Datenbank speichern will.
Ich habe mir nun überlegt, einfach eine Überpüfung der Eingabe durchzuführen, sobald ein Textfeld den Focus verliert. Das ist aber bei 16 Textfeldern sehr umständlich.
Wie mache ich das am besten? Oder gibt es noch eine bessere Lösung?
Bitte schreibt relativ leichte Antworten, da ich noch ziemlich neu auf diesem Gebiet bin.
bei solchen Sachen würde ich immer zwischenspeicher benutzen, d.h. 16 Laben, diese mit der DB verbinden, die textfelder nicht. Beim klicken auf OK werde ndann die werte überprüft und in die label eingetragen.
Ich würde ein TextFeld Array machen. Das geht ganz einfach, indem du ein Textfeld erzeugst und dann 15 mal kopierst. Beim erstenmal Kopieren wirst du gefragt, ob du ein array machen willst.
Der Losfocus - Event gilt dann für alle felder. Als Parameter wird dir ein Index mitgeliefert, welcher die nummer des Feldes in dem Array anzeigt.
Es gibt eine Eigenschaft „CausesValidation“ und ein Event „Validate“.
Wenn Du, wie die anderen schon vorschlugen, ein TextBox-Array erstellst und bei allen oder bei der letzten TextBox „CausesValidation“ auf True setzt, wird beim Verlassen selbigen/r das Event „Validate“ ge-raised.
In der Event-Prozedur „txtBox_Validate“ kannst Du dann alle TextBoxes mit IsNumeric(txtBox) auf numerische Werte überprüfen.
Bsp:
Private Sub txtBox_Validate(Index As Integer, Cancel As Boolean)
Dim oText As TextBox
For Each oText In txtBox
If IsNumeric(oText.Text) = False Then
Val (oText.Text)
End If
Next
End Sub
Die Idee ist sehr gut, allerdings ist Dir mit den CausesValidation ein Fehler unterlaufen:
Causesvalidation = TRUE in einem Feld xy bedeutet, daß für das Vorgängerfeld der Validate Event geraised wird. Also Wenn feld a verlassen wird und feld xy den Focus erhält und in feld xy CausesValidation = True dann wird für feld a die Validate-Methode ausgeführt.
Klingt kompliziert ist aber gut so, denn bei einem EXIT Button wird man False einstellen, damit man die Maske auch verlassen kann, wenn man fehlerhafte Werte im/in den Vorgängerfelder(n) eingetragen hat.
Maria
PS: Übrigens Stefan: es wäre nett wenn Du mich nicht vorher anrufen würdest und dann meine Antworten postest (IsNumeric).
lg
Maria
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]