Estoy usando una función con bastante código para lograr algo sencillo, Obligar TextField que solo se pueda escribir Números o Letras.
Aquí mi función:
Mientras escribo verifico si hay algún carácter no valido en mi map admite
¿ Otra forma de hacerlo ?
Aquí mi función:
B4X:
Public Sub TextFormat(tx As TextField,numeros As Boolean) As String
Dim newCd As String=tx.Text
If admite.IsInitialized = False Then
admite.Initialize
admite.Put("a","a")
admite.Put("b","b")
admite.Put("c","c")
admite.Put("d","d")
admite.Put("e","e")
admite.Put("f","f")
admite.Put("g","g")
admite.Put("h","h")
admite.Put("i","i")
admite.Put("j","j")
admite.Put("k","k")
admite.Put("l","l")
admite.Put("m","m")
admite.Put("n","n")
admite.Put("ñ","ñ")
admite.Put("o","o")
admite.Put("p","p")
admite.Put("q","q")
admite.Put("r","r")
admite.Put("s","s")
admite.Put("t","t")
admite.Put("u","u")
admite.Put("v","v")
admite.Put("w","w")
admite.Put("x","x")
admite.Put("y","y")
admite.Put("z","z")
admite.Put("0","0")
admite.Put("1","1")
admite.Put("2","2")
admite.Put("3","3")
admite.Put("4","4")
admite.Put("5","5")
admite.Put("6","6")
admite.Put("7","7")
admite.Put("8","8")
admite.Put("9","9")
admite.Put(" "," ")
admite.Put(".",".")
admite.Put("@","@")
Else
Dim k As String=admite.Get("a")
If k=="null" Then
admite.Put("a","a")
admite.Put("b","b")
admite.Put("c","c")
admite.Put("d","d")
admite.Put("e","e")
admite.Put("f","f")
admite.Put("g","g")
admite.Put("h","h")
admite.Put("i","i")
admite.Put("j","j")
admite.Put("k","k")
admite.Put("l","l")
admite.Put("m","m")
admite.Put("n","n")
admite.Put("ñ","ñ")
admite.Put("o","o")
admite.Put("p","p")
admite.Put("q","q")
admite.Put("r","r")
admite.Put("s","s")
admite.Put("t","t")
admite.Put("u","u")
admite.Put("v","v")
admite.Put("w","w")
admite.Put("x","x")
admite.Put("y","y")
admite.Put("z","z")
admite.Put("0","0")
admite.Put("1","1")
admite.Put("2","2")
admite.Put("3","3")
admite.Put("4","4")
admite.Put("5","5")
admite.Put("6","6")
admite.Put("7","7")
admite.Put("8","8")
admite.Put("9","9")
admite.Put(" "," ")
admite.Put(".",".")
admite.Put("@","@")
End If
End If
'en caso de ser solo numeros, Limpiamos el map
If numeros=True Then
admite.Clear
admite.Put("0","0")
admite.Put("1","1")
admite.Put("2","2")
admite.Put("3","3")
admite.Put("4","4")
admite.Put("5","5")
admite.Put("6","6")
admite.Put("7","7")
admite.Put("8","8")
admite.Put("9","9")
End If
For i = 0 To tx.Text.length -1
Dim ncd,eli As String
eli=tx.Text.charat(i)
ncd = admite.Get(eli.ToLowerCase)
If ncd=="null" Then
Log("caracter invalido "&eli)
newCd= newCd.Replace(eli,"")
End If
Next
tx.Text= newCd
tx.SetSelection(tx.Text.Length,tx.Text.Length)
Return newCd
End Sub
Mientras escribo verifico si hay algún carácter no valido en mi map admite
B4X:
tx1_TextChanged (Old As String, New As String)
TextFormat(reg_tx1,True) 'Solo numeros
End Sub
tx2_TextChanged (Old As String, New As String)
TextFormat(reg_tx2,True) 'Solo LETRAS
End Sub
¿ Otra forma de hacerlo ?