Newsgroup: it.comp.lang.visual-basic
Titolo: Scrivere solo numeri

Già prima ho postato una cosa simile:
Come posso fare per consentire di scrivere in una text box solo dei numeri?
grazie ancora per l'aiuto

FormW@re <formwa...@TOGLIMIhotmail.com> wrote in message
PsB57.97197$q77.8...@news2.tin.it...

prova cosi':
Function SoloNumeri(num As Integer) As Integer
    On Error Resume Next
'controlla che si digitino solo numeri ("." + backspace)
'inserire all'evento keypress: KeyAscii = SoloNumeri(KeyAscii)
    Dim TestOK As Boolean
    corretti$ = "0123456789.-/" + Chr$(8)
    TestOK = False
    For n = 1 To Len(corretti$)
        valore = Asc(Mid$(corretti$, n, 1))
        If valore = num Then TestOK = True
    Next n
    If TestOK = True Then
        SoloNumeri = num
    Else
        SoloNumeri = 0
    End If
End Function
CIAO!

 Gią prima ho postato una cosa simile:


ho dovuto solo dichiarare le variabili:
Dim corretti As String
Dim n As Integer
Dim valore As Integer
tutto il resto è Ok.
sei stato gentilissimo

>>>>> "F" == FormW@re  <formwa...@TOGLIMIhotmail.com> writes:
F> Già prima ho postato una cosa simile:
F> Come posso fare per consentire di scrivere in una text box solo dei numeri?
Usa l'evento keypress e lascia passare i caratteri dal 48 al 57 più il
20. Gli altri fermali ponendo il parametro KeyAscii a 0.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

Ritengo che utilizzare il carattere ASCII per controllare su evento
KEY_PRESS sia molto più veloce, a memoria non ricordo, ma pichè i numeri
sono 10, cioè da 0 a 9 se il codice KeyASCII <30 OR KeyASCII>39 allora non
valido.
Una sola riga di codice.
ALEX.
-- 
Posted from [212.141.54.102] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Come posso fare per consentire di scrivere in una text box solo dei
numeri?
controllare il KeyPress va bene, occhio però che se l'utente incolla del
testo nella TextBox sei fregato; controlla anche nell'evento Change
Ciao
Faber

 writes:
F> controllare il KeyPress va bene, occhio però che se l'utente incolla del
F> testo nella TextBox sei fregato; controlla anche nell'evento Change
Vero! E ci ero pure già inciampato...


 Gią prima ho postato una cosa simile:


 > Già prima ho postato una cosa simile:


 ha scritto nel messaggio
news:yQV57.5395$8M2.1...@news.infostrada.it...


Dopo una giornata di lavoro credo di aver risolto il problema con un po di
codice che elenco di seguito
Creare un form ed una textbox denominata txtNumber
Ho fatto solo alcune prove e pare che funzioni, probabilmente si può anche
snellire, affinando il codice
testalo se vuoi e fammi sapere
Ciao
Private Sub txtNumber_LostFocus()
        txtNumber.Text = FilterNumber(txtNumber.Text, True)
    On Error Resume Next
    If Int(CDbl(txtNumber.Text)) = CDbl(txtNumber.Text) Then
        txtNumber.Text = Format(CDbl(txtNumber.Text), "#,###,###,##0")
    Else
        txtNumber.Text = Format(CDbl(txtNumber.Text), "#,###,###,##0.###")
    End If
End Sub
Function FilterString(Text As String, validChars As String) As String
    Dim i As Long, result As String
    For i = 1 To Len(Text)
        If InStr(validChars, Mid$(Text, i, 1)) = 0 Then
            MsgBox "numero errato", vbCritical
            result = ""
            Exit For
        Else
            result = txtNumber.Text
        End If
    Next
    FilterString = result
End Function
Function FilterNumber(Text As String, TrimDecimal As Boolean) As String
    Dim decSep As String, i As Long
    Dim result As String
    decSep = Format$(0.1, ".")
    result = FilterString(Text, decSep & "-0123456789")
    If TrimDecimal And InStr(Text, decSep) > 0 Then
        For i = Len(result) To 1 Step -1
            Select Case Mid$(result, i, 1)
                Case decSep
                    result = Left$(result, i - 1)
                    Exit For
                Case "0"
                  result = Left$(result, i - 1)
                Case Else
                    Exit For
            End Select
        Next
    End If
    FilterNumber = result
End Function