Spanish EditText longitud de caracteres

maprisa

Member
Hola mi nombre es Manuel, soy nuevo en B4A, estoy intentando de limitar los caracteres de un EditText, pero no se como hacerlo, alguien me puede echar un cable??, lo que quiero es que solo admita por ejemplo 5 caracteres que no deje meter mas de 5.
Gracias de ante mano
 

eurojam

Well-Known Member
Licensed User
Longtime User
puedes hacerlo con un EVENT como en esto ejemplo:
B4X:
sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private ed As EditText
    Private maxSize As Int = 5
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Activity.LoadLayout ("My_layout")
 
   ed.Initialize("ed")
   Activity.AddView(ed,0,0,100%x,30dip)

End Sub

Sub ed_TextChanged (Old As String, New As String)
    If New.Length > maxSize Then
        ed.Text = Old
    End If
End Sub
 

Heppy

Active Member
Licensed User
Longtime User
Hola Manuel. Bienvenido.


B4X:
Sub EditText1_TextChanged (Old As String, New As String)
    If New.Length>5 Then EditText1.Text=Old
End Sub

Edito: eurojam se ha adelantado, jaja.
 

aviario

Active Member
Licensed User
Longtime User
Hola, yo lo hago de la siguiente forma.
Pongo en el tag los caracteres que quiero
Ejemplo:
Alfd_3|6.2 ( Alfd_3 es el editext) lo separo por "|" y después pongo el numero de caracteres ( en este caso 6 enteros y dos decimales )

Después en el EditTexts_TextChanged llamo a una rutina en la que controlo los caracteres

B4X:
Sub EditTexts_TextChanged (Old As String, New As String)
    edt = Sender
    ValorTex=edt.Text
    Rutinas.Descompon_Tag(edt)
    Select Rutinas.NombreAlf
       Case "Alf_1"
          If Alf_1.Text <> "" Then Rutinas.Ctrl_Longitud(Alf_1,Rutinas.MaxCaracteres,Rutinas.Numdecimales)
    End Select
End Sub

B4X:
Sub Descompon_Tag(edt As EditText )
    PosiIni=InStr(edt.Tag,"|")
    ' Saco el Nombre del Text y los caracteres que tiene que llevar
    If PosiIni <> 0 Then
       NombreAlf=Left(edt.Tag,PosiIni-1)
       ' Compruebo si trae decimales
       PosiPunto=InStr(edt.Tag,".")
       If PosiPunto=0 Then
          Numdecimales=0
       Else
          Numdecimales=Mid(edt.Tag,PosiPunto+1,3)
       End If
       If PosiPunto-1 <= 0 Then
          MaxCaracteres=Mid(edt.Tag, PosiIni+1,3)
       Else
          MaxCaracteres=MidLargo(edt.Tag,PosiIni,PosiPunto-1)
       End If
    End If

B4X:
Sub Ctrl_Longitud(CtrlAlf As EditText,Maxca As String,Ndecimales As Int)
    Dim ControlCaracteres As Int
    ControlCaracteres=Miracaraceteres(CtrlAlf.Text,MaxCaracteres,Ndecimales)
    If ControlCaracteres =1 Then
      CtrlAlf.Text =Poncaracteres(CtrlAlf.Text,MaxCaracteres): CtrlAlf.SelectionStart =MaxCaracteres
    Else If ControlCaracteres =2 Then
      CtrlAlf.Text =Poncaracteres(CtrlAlf.Text,Ndecimales): CtrlAlf.SelectionStart =InStr(CtrlAlf.Text,".")+Ndecimales
    Else If ControlCaracteres =3 Then
      CtrlAlf.Text =Poncaracteres(CtrlAlf.Text,(MaxCaracteres-Ndecimales-1)): CtrlAlf.SelectionStart =(MaxCaracteres-Ndecimales-1)
    End If

End Sub

B4X:
Sub Miracaraceteres(Text As String,Longitud As Int,Ndecimales As Int) As Int
    ' 0 es Correcto
    ' 1 se pasa de caracteres
    ' 2 se pasa de decimales
    ' 3 se pasa de enteros
    If Ndecimales <> 0 Then
       PosiIni=InStr(Text,".")
       If PosiIni <> 0 Then
          If Len(Mid(Text,PosiIni+1,3)) > Ndecimales Then
            ToastMessageShow("Maximo de Decimales.: " & Ndecimales , False)
            Return 2
          End If
       Else
          If Text.Length > (Longitud-Ndecimales-1) Then
             ToastMessageShow("Maximo de Caracteres.: " & (Longitud-Ndecimales-1) , False)
             Return 3
          End If
       End If
    Else If Text.Length > Longitud  Then
       ToastMessageShow("Maximo de Caracteres.: " & Longitud , False)
       Return 1
    Else 
       Return 0
    End If
End Sub

B4X:
Sub Poncaracteres(Text As String, Length As Long)As String
    PosiIni=InStr(Text,".")
    If PosiIni <> 0 Then
       Return Text.SubString2(0, PosiIni+Length)  
    Else
       Return Text.SubString2(0, Length)
    End If
End Sub




 

maprisa

Member
Hola a todos, encantado de participar en este foro, gracias a Eurojam, Eppy y aviario por vuestra pronta respuesta
lo primero que quiero decir es que soy un total novato, he probado el código que ha puesto Eurojam y cuando incluyo
en el Sub Globals :
Private maxSize As Int = 5 , me sale subrayado con el mensaje de error ' Unused variable maxSize (warming #9)

He intentado introducir en el Sub EditText1_TextChanged (Old As String, New As String)
el código que me sugiere Heppy no me da errores, pero cuando ejecuto un F5(Run) y se compila
una vez transferida al móvil e instalada cuando empiezo a meter texto en el EditText, el móvil se queda tiezo
vamos se queda colgao,
voy a explicar un poco lo que tengo hecho a ver si así llegamos a una solución:
Este es mi código: aunque tengo declarado varias cosas como un Botón, una Etiqueta etc, pero esto no afecta al EditText


Sub EditText1_TextChanged (Old As String, New As String)

Dim s As String 'declaro s como tipo string
s=New
Label1.Text=s.Length ' s es igual a la longitud de caracteres introducida en el Editex
If s.Length>5 Then Label2.Text="HAS REVASADO EL LIMITE" 'si es mayor que 5 los caractertes, aparecera el mensaje en la etiqueta2

End Sub

Pero que pasa?? el mensaje aparece, pero puedo meter más caracteres y eso es lo que no quiero,, quiero que cuando llegue a 5 el cursor
no permita más caracteres
 

Heppy

Active Member
Licensed User
Longtime User
Dim s As String 'declaro s como tipo string
s=New
Label1.Text=s.Length ' s es igual a la longitud de caracteres introducida en el Editex
If s.Length>5 Then
Label2.Text="HAS REVASADO EL LIMITE" 'si es mayor que 5 los caractertes, aparecera el mensaje en la etiqueta2
EditText1.Text=Old
end if
 

maprisa

Member
Hola de nuevo, muchísimas gracias Heppy, y por supuesto también a los demás, ahora si, ya me limita los caracteres
 
Last edited:

Ferbis

Active Member
Licensed User
Longtime User
Hola maprisa. Bienvenido

No olvides añadir el [SOLUCIONADO] en el titulo del post ;)
 

maprisa

Member
Gracias Ferbis lo tengo en cuenta, pero! como puedo acceder al titulo?, cuando edito solo puedo modificar el texto del mensaje
gracias
 

Ferbis

Active Member
Licensed User
Longtime User
Hola maprisa,

Debes seleccionar "Thread tools" (Herramientas del hilo) que esta a la derecha del titulo. Te aparecerá un desplegable. Selecciona, a su vez, "Edit Title" (Editar el título). Haz el cambio, y ya esta!!

Cualquier duda me dices
 

Attachments

  • Herramientas del hilo.png
    Herramientas del hilo.png
    6 KB · Views: 356

Ferbis

Active Member
Licensed User
Longtime User
He comentado esto mismo con Tomky que también ha cambiado el titulo y debe ser cuestión del navegador que estás usando. Prueba con otro navegador, y si aún así no te funciona, abre un nuevo hilo para que pueda participar mas gente.
 
Top