Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178

    [VB6] Solo numeri nella textbox

    come faccio a far in modo che in una textbox possano essere inseriti solo numeri da tastiera o da tastierino numerico e il pulsante Enter, e che non possano essere inseriti tutti gli altri caratterei punti e virgole inclusi. io ho provato cosi ma non funziona... xke mi da la msg box ad ogni tasto che premo, numeri compresi...

    codice:
    Private Sub txtNum_Keydown(KeyAscii As Integer, shift As Integer)
    
    If KeyAscii = vbKeyReturn Or vbKey0 Or vbKey1 Or vbKey2 Or vbKey3 _
    Or vbKey4 Or vbKey5 Or vbKey6 Or vbKey7 Or vbKey8 Or vbKey9 Or _
    vbKeyNumpad0 Or vbKeyNumpad1 Or vbKeyNumpad2 Or vbKeyNumpad3 Or _
    vbKeyNumpad4 Or vbKeyNumpad5 Or vbKeyNumpad6 Or vbKeyNumpad7 Or _
    vbKeyNumpad8 Or vbKeyNumpad9 Then
    
        If KeyAscii = vbKeyReturn And Val(txtNum.Text) > 0 Then
            Command1_click
        End If
    
    Else
    
        MsgBox "Valore non valido." & Chr(10) & "Inserire un valore numerico e minore di:" & Chr(13) & "'662'", vbExclamation + vbOKOnly, "Valore non valido"
        txtNum.Text = ""
        txtNum.SetFocus
    
    End If
    
    End Sub

  2. #2
    perchè non devi fare

    If KeyAscii = vbKeyReturn Or vbKey0

    ma If KeyAscii = vbKeyReturn Or KeyAscii = vbKey0

    eccetera...xò c sono altri modi migliori...ad esempio fare un array contenente tutti i numeri e poi confrontarli con la funzione instr

  3. #3
    Ai copia/incolla non hai pensato ? La strada non è questa, ti posto il codice esatto:
    codice:
    testo = Text1.Text
    car = Right(Text1.Text, 1)
    If car <> "" And IsNumeric(car) = False Then
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
    Text1.SelStart = Len(Text1.Text)
    End If
    Chiaramente ci puoi creare una funzione del tipo:
    codice:
    Public Function SoloNumeri (nometextbox as textbox) as long
    ciao

  4. #4
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178
    @ MdE2005 grazie per il codice... vorrei usarlo... ma nn lo capisco molto ... potresti spiegarmi i passi principali?

  5. #5
    [QUOTE]Originariamente inviato da MdE2005
    codice:
    testo = Text1.Text
    'crea una variabile chiamata testo e gli attribuisce il contenuto della casella di testo text1 di cui vuoi impedire l'inserimento di caratteri non numerici
    
    car = Right(Text1.Text, 1)
    'seleziona l'ultimo carattere inserito e lo salva nella variabile salva
    
    If car <> "" And IsNumeric(car) = False Then
    'imposta le condizioni per accettare solo numeri
    
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
    'nel caso in cui sia inserito un carattere non numerico allora considera tutto il contenuto di text1 ad eccezione dell'ultimo carattere, in quanto non numerico
    
    Text1.SelStart = Len(Text1.Text)
    'imposta la selezione all'ultimo carattere, altrimenti per scrivere "casa" ti ritroveresti "asac"..
    
    End If
    Mi ero dimenticato di dirti di inserire questo codice nell'evento "Change" della textbox

    Ciao

    ps l'allusione alla funzione lasciala perdere..

  6. #6
    Ciao a tutti.
    Scusate se mi intrometto, ma io in un caso analogo ho provveduto così:

    codice:
    ' * Gestione dei dati digitati riguardanti l'importo della fattura
    Private Sub txtImporto_KeyPress(KeyAscii As Integer)
       Select Case KeyAscii
          Case 0 To 31, 44, 48 To 57    ' Caratteri di controllo, virgola e numerici
             ' dati accettati
             Exit Sub
          Case Else
             KeyAscii = 0
       End Select
    End Sub
    In questa maniera la textbox accetta solo caratteri di controllo, la virgola (necessaria se il numero è decimale) ed i numeri.
    Adatta quindi secondo le tue esigenze agendo sui valori espressi nella "Case".
    Per gestire il tasto "Enter" devi impostare a "True" la voce "KeyPreview" del form che ospita la tua textbox e sfruttare questo codice:


    codice:
    Private Sub Form_KeyPress(KeyAscii As Integer)     ' Spostamento tra un campo e l'altro mediante il tasto
        If KeyAscii = 13 Then                          ' "Enter" - Nota: la proprietà KeyPreview del form è True
           SendKeys "{TAB}"
           KeyAscii = 0
        End If
    End Sub
    Per intercettare poi eventuali casi di "incollaggio" che non verrebbero gestiti dal codice di cui sopra (txtImporto_KeyPress), io uso il metodo "Validate" come di seguito:


    codice:
    Private Sub txtImporto_Validate(Cancel As Boolean)    ' Importo fattura - obbligatorio 
       If Not IsNumeric(txtImporto.Text) Then
          MsgBox "TuoMessaggioD'Errore": Cancel = True: txtImporto.SetFocus
       End If
    End Sub
    Fammi sapere.

    Giulio C. - Roma

  7. #7
    Ciao..anche la tua soluzione è valida, ma penso che gli vada bene anche la mia visto che è breve e si potrebbe ulteriormente sintetizzare (ma era più difficile da capire rispetto all'altra) in:
    codice:
    If right(text1.text,1) <> "" And IsNumeric(right(text1.text,1)) = False Then
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
    Text1.SelStart = Len(Text1.Text)
    Mi sono reso conto che avevo inserito una riga che a me serviva nel mio programma e qui no..(testo = text1.text..)

    Per Giulio: hai fatto benissimo a postare il tuo codice, è meglio poter dare più soluzioni ad uno stesso problema, alla fine un forum come questo serve proprio a migliorarsi, non credi?

    ciao

  8. #8
    Utente di HTML.it L'avatar di Artemio
    Registrato dal
    Jan 2006
    Messaggi
    178
    @Giulio C. grazie mille il metodo mi sembra ottimo e completo... e anche abbastanza facile da capire.

    @MdE2005 prima di tutto grazie mille per il codice. secondo,ho provato il tuo codice, e riesco a farlo funzionare bene, però non ho ben capito come funziona. ti spiego; io sono uno studente di scuola superiore, sto facendo un progetto che poi dovrò presentare alla mia prof... quindi devo anche riuscire a capire quello che scrivo .
    allora io conosco le funzioni:
    right(stringa,N)
    left(stringa,N)
    len(stringa,N)
    IsNumeric e selStart...
    e che proprio nn riesco a capire il funzionamento logico della stringa... sarei felicissimo se tu me lo potessi spiegare; sono sempre curioso di imparare cose nuove visto che al momento le mie conoscenze si limitano ad un libro di appena 150 pagine su visual basic. e scusa ancora per il disturbo.

  9. #9
    @ MdE2005: sono perfettamente d'accordo con te!! Ho appunto postato il codice proprio per dare una soluzione diversa. Grazie per la tua attenzione.

    @ Artemio: lieto di esserti stato d'aiuto. Buon lavoro!
    Giulio C. - Roma

  10. #10
    Riposto il codice:
    codice:
    car = Right(Text1.Text, 1)
    'seleziona l'ultimo carattere inserito e lo salva nella variabile salva
    
    If car <> "" And IsNumeric(car) = False Then
    'imposta le condizioni per accettare solo numeri
    
    Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
    'nel caso in cui sia inserito un carattere non numerico allora considera tutto il contenuto di text1 ad eccezione dell'ultimo carattere, in quanto non numerico
    
    Text1.SelStart = Len(Text1.Text)
    'imposta la selezione all'ultimo carattere, altrimenti per scrivere "casa" ti ritroveresti "asac"..
    
    End If
    1) "Catturo" l'ultimo carattere inserito
    2) Imposto le condizioni: se è diverso da "" e non è un numero allora
    3) prendo il contenuto della casella di testo, ad eccezione dell'ultimo carattere che corrisponde al carattere inserito
    4) imposto la selezione sull'ultimo carattere

    Ammettiamo che nella casella di testo io abbia già questi tre caratteri: "123"
    Voglio inserire la lettera "a"

    1) catturo la a (cioè l'ultimo carattere della stringa 123a)
    2) condizioni
    3) text1.text = 123 (senza a perchè non è numerico, con la funzione left
    4) imposto la selezione su 3, quindi vedi una cosa del genere

    123| con la barra che lampeggia in quanto puoi scrivere...altrimenti sarebbe stato |123 e se aggiungi 4 ti viene 4123..

    Spero di essere stato più chiaro..

    ciao

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.