Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo di numericita'





Mi piacerebbe conoscere un metodo 'serio' per il 
controllo di numericita' sulla casella di testo(forse uso l'oggetto sbagliato?) 
dato che anche negli esempi forniti da VB c'e' un controllo che accetta quasi 
tutto tranne numeri (si fa per dire). 


 


Grazie, accetto suggerimenti per routine di 
controllo numericita' su textbox da ricopiare.


ciao.






E se usassi la funzione IsNumber(<StringaDaControllare>) ? Magari all'evento
Validate, per poter restare sul controllo se qualcosa non quadra (ricordati
di avere sulla form almeno un controllo con la proprieta' CausesValidation
a TRUE...)

Bye by Massimo 8-]



SANREMO:
  Ti rimando le due routines che ho gia' inviato qualche giorno fa'
Le ho scritte perche' IsNumeric non mi piace in quanto non controlla la
posizione del segno, del punto decimale e non distingue fra interi
e reali.
Function KAscNumInteri(ByVal KA% _
    , Optional ByVal Neg As Boolean = False) As Integer
'
'   Ritorna solo i caratteri validi per un campo
'   contenente un numero intero (anche negativo se
'   viene passato il valore Neg = True).
'   Tutti gli altri caratteri vengono annullati.
'   Va' usato nella procedura KeyPress di TextB come:
'   KeyAscii = KAscNumInteri(KeyAscii [, Neg])
'
    Dim KeyMinus%, TextB As TextBox
'
    Const myKeyMinus% = 45  ' E' il valore effettivamente ritornato
                            ' alla pressione del tasto - ;
                            ' vbKeySubtract (= 109) non funziona.
'
    Set TextB = Screen.ActiveControl
'
    If (Left$(TextB.Text, 1) <> "-" Or TextB.SelText = TextB.Text) _
    And Neg And TextB.SelStart = 0 Then KeyMinus = myKeyMinus
'
    Select Case KA
        Case vbKey0 To vbKey9, KeyMinus, vbKeyBack
        KAscNumInteri = KA
'
        Case Else
        KAscNumInteri = 0
    End Select
'
'
'
End Function
e
Function KAscNumReali(ByVal KA% _
    , Optional ByVal Neg As Boolean = False) As Integer
'
'   Ritorna solo i caratteri validi per un campo
'   contenente un numero reale (anche negativo se
'   viene passato il valore Neg = True).
'   Tutti gli altri caratteri vengono annullati.
'   Va' usato nella procedura KeyPress di TextB come:
'   KeyAscii = KAscNumReali(KeyAscii [, Neg])
'
    Dim KeyDecimal%, KeyMinus%, TextB As TextBox
'
    Const myKeyMinus% = 45      ' Sono i valori effettivamente ritornati
    Const myKeyDecimal% = 46    ' alla pressione del - e del . decimale;
                                ' vbKeySubtract (= 109) e
                                ' vbKeyDecimal (= 110) non funzionano.
    Const SD$ = "."
    'Const myKeyDecimal% = 44    ' Se il separatore decimale
    'Const SD$ = ","             ' del sistema e' la virgola.
'
    Set TextB = Screen.ActiveControl
'
    If (InStr(TextB.Text, SD$) = 0 _
    And Not (TextB.SelStart = 0 And Left$(TextB.Text, 1) = "-")) _
    Or TextB.SelText = TextB.Text Then KeyDecimal = myKeyDecimal
'
    If (Left$(TextB.Text, 1) <> "-" Or TextB.SelText = TextB.Text) _
    And Neg And TextB.SelStart = 0 Then KeyMinus = myKeyMinus
'
    Select Case KA
        Case vbKey0 To vbKey9, KeyDecimal, KeyMinus, vbKeyBack
        KAscNumReali = KA
'
        Case Else
        KAscNumReali = 0
    End Select
'
'
'
End Function
Ciao e vedi un po' se e' quello che ti serve.
Franco
