Inputbox testo solo numeri

lunedì 15 marzo 2010 - 19.51

dompa72 Profilo | Senior Member

E' possibile personalizzare la casella di testo di una inputbox??? Oppure interagire con la casella di testo per permettere solo inserimento di caratteri numerici???
Spero di non essere costretto a creare una windows form con una textbox e da lì gestire il KeyPress.

Ciao e grazie

AntCiar Profilo | Expert

Ciao.

Se a te serve inserire solo numeri utilizza la numeriUpdown al posto della textBox.
Se poi vuoi un qualcosa di dinamico, allora creati una classe che eredita dalla TextBox e gli implementi l'evento KeyPress e a seconda delle impostazioni decidi se accettare solo numeri, solo lettere, oppure testo e numeri.

Ciao ciao
Cristian Barca

dompa72 Profilo | Senior Member

Penso di creare una dll con una form che imita una input box.
Secondo te la scelta va bene

ridaria Profilo | Expert

Usa questa, vedi che te ne pare:

Module MOD_TEXTBOX
Function Text_Solo_Numeri(ByVal pKeyAscii As Integer, ByVal pTextBox As TextBox, Optional ByVal pNegativi As Boolean = False) As Integer

'Impedisce l'Inserimento di caratteri non numerici
'Se il carattere non è un numero allora restituisce 0 altrimenti restituisce il codice Ascii del numero digitato
'Richiamare la funzione nell'evento KeyPress della textBox in cui si vuole che vengano scritti solo NUMERI
'Assegnare alla variabile keyAscii dell'evento KeyPress della TextBox in questione il valore restituito da questa Funzione


If pNegativi = False Then 'Solo Positivi

If (pKeyAscii >= 47 And pKeyAscii <= 57) Or pKeyAscii = 8 Or pKeyAscii = 46 Or pKeyAscii = 44 Then

If pKeyAscii = 46 Or pKeyAscii = 44 Then
If Not virgolaExist(pTextBox.Text) Then
pKeyAscii = Txt_Punto_Virgola(pKeyAscii)
Else
pKeyAscii = 0
End If
End If

Text_Solo_Numeri = pKeyAscii
Else
Text_Solo_Numeri = 0
End If

Else 'Anche negativi

If (pKeyAscii >= 47 And pKeyAscii <= 57) Or pKeyAscii = 8 Or pKeyAscii = 46 Or pKeyAscii = 44 Or pKeyAscii = 45 Then

If pKeyAscii = 46 Or pKeyAscii = 44 Then
If Not virgolaExist(pTextBox.Text) Then
pKeyAscii = Txt_Punto_Virgola(pKeyAscii)
Else
pKeyAscii = 0
End If
End If

Text_Solo_Numeri = pKeyAscii
Else
Text_Solo_Numeri = 0
End If
End If

End Function

Function virgolaExist(ByVal pNUmero As String) As Boolean
Dim n As Integer

If Len(pNUmero) > 0 Then
For n = 1 To Len(pNUmero)

If Asc(Mid(pNUmero, n, 1)) = 44 Then
virgolaExist = True
Exit For
End If

Next n

End If

End Function

Function Txt_Punto_Virgola(ByVal pKeyAscii As Integer)
Dim car As String

'sostituisce il punto con la virgola
'Richiamare la Funzione nell'evento KeyPress della textBox in cui si vuoile che si digiti sempre una virgola e non il punto
'Assegnare alla variabile keyAscii dell'evento KeyPress della TextBox in questione il valore restituito da questa Funzione
If pKeyAscii = 46 Then
car = Chr(44)
Txt_Punto_Virgola = Asc(car)
Else
Txt_Punto_Virgola = pKeyAscii
End If

End Function
End Module

Poi nell'evento keyPress della casella di testo inserisci la chiamata alla funzione Text_Solo_Numeri in questo modo:
Private Sub txtBoxNumerica(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
e.KeyChar = Chr(Text_Solo_Numeri(Asc(e.KeyChar), txtBoxNumerica))
End Sub
Non devi far altro.

La funzione Text_Solo_Numeri ha anche un parametro per i valori negativi, con il quale potrai decidere se abilitare anche l'inserimento di valori negativi preceduti dal segno meno.

La funzione inoltre impedisce l'inserimento del punto, tramutandolo sempre in virgola. Ciò perché si presume che la funzione venga usta per sistemi metrici decimali europei e non USA. In questo modo dirai agli utenti che non devono preoccuparsi, qualunque cosa inseriscono, punto o virgola il sistema è intelligente. :-)

Ciao





Riccardo D'Aria

dompa72 Profilo | Senior Member

Ho risolto con una classe esterna contenente una windowsform disegnata come una InputBox dove posso controllare completamente la text box in particolare il KeyPress ed il KeyDown, questa viene chiamata come finestra di dialogo restituendo il valore alla sua chiusura.

Grazie comunque per le risposte
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5