Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514

    [vb net] Casella di teso solo per numeri e virgola

    Salve,
    ho una casella di testo nella quale vorrei inserire solo numeri e la virgola

    ho usato questo codice

    Codice PHP:
     Private Sub TextBox9_KeyPress(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyPressEventArgsHandles TextBox9.KeyPress
            
    If Not (Char.IsDigit(e.KeyChar)) Or (Char.IsSurrogate(e.KeyChar)) Then
                e
    .Handled True
            
    Else
                
    Beep()
            
    End If
        
    End Sub 
    solo che non riesco a capire come inserire la virgola per il mio scopo

    grazie in anticpo per le risposte
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  2. #2
    codice:
    Private Sub TextBox9_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox9.KeyPress
        If Not (Char.IsDigit(e.KeyChar) Or e.KeyChar=","c) Then
            e.Handled = True
            Beep()
        End If
    End Sub
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Se, come immagino, nella textbox devi inserire dei numeri con la virgola il codice che hai scritto non va bene perché, per esempio, ti permette di inserire anche più di una virgola...
    Io uso una classe del genere:
    codice:
    Public Class CKeyFilterPunto 
        Public Sub OnlyNumbersAndComma(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim TB As TextBox
            TB = CType(sender, TextBox)
    
            Dim s As [String] = TB.Text.ToString()
            Dim DecimalSeparator1 As String = ","
    
            Dim Virgola As Integer = s.IndexOf(DecimalSeparator1.ToString(), 0, s.Length)
               If Virgola = -1 Then
                If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or DecimalSeparator1.IndexOf(e.KeyChar) <> -1) Then
                    e.Handled = True
                End If
            Else
                If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then
                    e.Handled = True
                End If
            End If
        End Sub
    End Class
    Crea questa variabile a livello di Form:
    codice:
    Private CkfVirgolaEPunto As New CKeyFilterPuntoEVirgola
    e la assegno alla KeyPress della Textbox
    codice:
    AddHandler TextBox.KeyPress, AddressOf Ckf.OnlyNumbersAndComma

  4. #4
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    grazie
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  5. #5
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    va bhe...ma chi è che mette due punti decimali

    comunque mi sarebbe utile aggiungere anche il tasto che permette di cancellare il numero immesso....in pratica la frecca in alto a detsra della tastiera

    grazie
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  6. #6
    va bhe...ma chi è che mette due punti decimali
    Mi permetto di dire che se ragioni così i tuoi programmi saranno sempre soggetti ad errori e daranno sempre problemi. Devi prendere in considerazione anche i casi estremi.
    comunque mi sarebbe utile aggiungere anche il tasto che permette di cancellare il numero immesso....in pratica la frecca in alto a detsra della tastiera
    Il BackSpace, quello sul tasto Invio? a me ha sempre funzionato, che problema ti da? Prova a mettere un punto di interruzione nella classe che ti ho postato e cerca di dare maggiori informazioni rispetto ad un "non cacella..."

  7. #7
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    lo so che la tua soluzione è quella orttimale. ma in questo caso mi hanno dato pochissimo tempo per risolvere dei problemi a monte. allora ho optato per la soluzione piu veloce.

    il tasto di cui parlo è quello . l'unico difetto che fa è che non funziona. o meglio quando lo premo , mi esce la voce che posso premere solo numeri e il punto
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  8. #8
    il tasto di cui parlo è quello . l'unico difetto che fa è che non funziona. o meglio quando lo premo , mi esce la voce che posso premere solo numeri e il punto
    Non vorrei che venga eseguito il codice presente nella TextBox9_KeyPress, perché il codice che ti ho postato non visualizza nessuna MessageBox. In tal caso, elimina pure la TextBox9_KeyPress

  9. #9
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Originariamente inviato da mardok30
    Se, come immagino, nella textbox devi inserire dei numeri con la virgola il codice che hai scritto non va bene perché, per esempio, ti permette di inserire anche più di una virgola...
    Io uso una classe del genere:
    codice:
    Public Class CKeyFilterPunto 
        Public Sub OnlyNumbersAndComma(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim TB As TextBox
            TB = CType(sender, TextBox)
    
            Dim s As [String] = TB.Text.ToString()
            Dim DecimalSeparator1 As String = ","
    
            Dim Virgola As Integer = s.IndexOf(DecimalSeparator1.ToString(), 0, s.Length)
               If Virgola = -1 Then
                If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or DecimalSeparator1.IndexOf(e.KeyChar) <> -1) Then
                    e.Handled = True
                End If
            Else
                If Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar)) Then
                    e.Handled = True
                End If
            End If
        End Sub
    End Class
    Crea questa variabile a livello di Form:
    codice:
    Private CkfVirgolaEPunto As New CKeyFilterPuntoEVirgola
    e la assegno alla KeyPress della Textbox
    codice:
    AddHandler TextBox.KeyPress, AddressOf Ckf.OnlyNumbersAndComma

    A me servirebbe una cosa così!
    Solo che non ho capito l'ultimo passaggio dell'handle...

    per caso è possibile far si che oltre i numeri e la virgola accetti anche il punto ma trasformandolo in virgola?

    Non l'ho capita sta classe xD

    per ora sto usando:
    codice:
            If e.KeyChar = "." Then
                e.KeyChar = ","
            Else
                If Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = ","c) Then
                    e.Handled = True
                    Beep()
                End If
            End If
    che funziona benissimo se nn fosse che appunto non va il BackSpace xD

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.