Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB6] Controllo spazio digitato su textbox.

    Salve, devo potere fare la seguente:

    ho una textbox dove posso digitare importi numerici.
    Tale valore viene a sua volta confrontato con una costante inizializzata a 180,76.

    Al momento su tale campo, mediante la funzione Val() faccio si che alla perdita del focus, se viene digitato un carattere che sia diverso da un numerico, viene segnalato l'errore all'utente.

    Tuttavia l'utilizzo della val() mi fa fallire il controllo tra gli importi nel caso in cui digito ad esempio: 180,77

    Perchè il confronto avviene tra il valore della costante 180,76 e il valore restituito dalla Val(), ovvero 180, quindi:

    if 180 > 180,67 --> torna OK mentre di fatto dovrebbe tornarmi KO, visto che nel campo io ho digitato la cifra decimale, 180,77.

    Ho provato a togliere la Val(), ma a quel punto se pigio lo spazio sulla tastiera nella textbox, il client mi torna un errore imprevisto che non è gestito, mentre se digito lettere il controllo funziona e se digito decimali essi vengono mantenuti

    La mia domanda è: posso intercettare (senza quindi usare la Val()) la presenza di uno spazio all'interno del textbox?
    Se si, come? Qualche keypress?
    Vi dico da subito che la funzione che mi controlla al momento se vengono digitati caratteri testuali, anzichè numeri esiste già, però non gestisce appunto lo spazio.

    Qualche suggerimento al volo?

    Grazie anticipatamente.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Utilizza il CSng o CDbl al posto del Val.
    Ciao

  3. #3
    Ciao..puoi modificare codesta funzione, per esempio:
    codice:
    Private Sub Text1_Change()
    car = Right(Text1.Text, 1)
    If car <> "" And car = "," Then Exit Sub
    If car <> "" And IsNumeric(car) = False Then
        Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
        Text1.SelStart = Len(Text1.Text)
    End If
    End Sub
    Ciao..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito molto del problema ... pero' mi sembra che la val debba essere usata cosi'

    Val(Replace(Text1.Text, ",", "."))

    in modo da non avere il problema dei decimali.

    Quello che non ho capito e' il legame tra l'uso della Val e lo spazio che ti da' errori ... magari lo rispieghi ...

  5. #5
    Non è ben chiaro. Se ho ben capito vuoi verificare che il testo sia numerico.
    Hai diverse possibilità.
    Sulla perdita del focus puoi chiedere:
    codice:
    Me.Text1.Text = Trim (Me.Text1.Text)
    If Not IsNumeric(Me.Text1.Text) Then
       MsgBox "Inserire caratteri numerici"
    End If
    Se vuoi controllare durante la digitazione allora...
    codice:
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        Select Case KeyAscii
            Case 48 to 57 '(i numeri)
            Case 44 '(la virgola)
            Case Else
                KeyAscii = 0
        End Select
    End Sub
    In ogni caso fai il controllo IsNumeric (per esempio potrebbero inserire + virgole)

  6. #6
    Innanzitutto grazie a tutti per i suggerimenti.

    Solo una nota, ma se io digito un importo con la virgola, IsNumeric non mi inibisce la corretta prosecuzione, o mi sbaglio? :master:
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  7. #7
    Ciao..

    ma se io digito un importo con la virgola, IsNumeric non mi inibisce la corretta prosecuzione, o mi sbaglio?
    codice:
    Isnumeric(10.4)
    non dà errore.

    codice:
    Isnumeric(10,4)
    dà errore..

    Ciao

  8. #8
    No, puoi mettere anche la virgola.

    La sintassi...
    codice:
    Isnumeric(10,4)
    ... da errore perchè è errata. VB6 interpreta la virgola come un separatore, non come un numero, quindi in questo caso vede 10 e 4 come 2 parametri da passare al metodo IsNumeric.
    Se la inserisci in una variabile non ti danno problemi ne la virgola ne il punto.

    questo funziona...
    codice:
    Variabile = "10,4"  'è il testo che scarichi dalla textbox
    MsgBox IsNumeric(Variabile) 'ti dice Vero

  9. #9
    Ciao Luciano..va bene la tua precisazione ma, dove è l'errore nel mio post? Non c'è..magari dovevo specificare il caso della variabile..cmq resta il fatto che "Insnumeric(10,4)" dà errore..

    Cmq ciao

  10. #10
    scusa, ho letto solo ora...
    da errore perchè è un errore di sintassi, non perchè non accetta la virgola!

    E' un errore di sintassi scrivere
    codice:
    IsNumeric(10,4)
    Non da errore in runtime, proprio non ti parte la sub che contiene questa istruzione! Infatti VB6 interpreta il 10 e il 4 come due parametri diversi, non come un numero decimale.

    E' invece corretto scrivere
    codice:
    IsNumeric("10,4")
    IsNumeric("10.4")
    IsNumeric(10.4)
    Maximum chiede se i numeri con la virgola vengono riconosciuti o no da IsNumeric. Dal momento che il numero è dentro una TextBox (quindi viene scaricato in una variabile o fa riferimento direttamente alla TextBox), sicuramente viene riconosciuto. Dalla tua risposta lui poteva pensare che la virgola non veniva accettata.
    Riassumendo: IsNumeric accetta i numeri con la virgola.
    Forse ora sono stato + chiaro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.