Programación General > Visual Basic 6.0 e inferiores

 Problema Textbox (solo Numeros, Solo Letras)

(1/2) > >>

zaida20:
Hola a todos, tengo el siguiente problema.

Estoy utilizando Gambas (Linux) y necesito que un textbox sólo me permita introducir números y comas y otro TexBox sólo me permita intruducir letras. He estado buscando información y he probado varios códigos, pero ninguno me funciona:

 
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress(KeyAscii AS Integer)IF KeyAscii <> 8 THEN   IF (KeyAscii < 48) OR (KeyAscii > 57) THEN   KeyAscii = 0   ENDIFENDIFEND 
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress()IF Key.Code <> 8 THEN   IF (Key.Code < 48) OR (Key.Code > 57) THEN   Key.Code = 0   ENDIFENDIFEND 
--- Código: Text ---PUBLIC SUB TexBox1_KeyPress()IF NOT IsNumber(TextBox1.Text) THENmessage.Info("Ingrese solo numeros")ENDIFEND  ¿Podeis ayudarme?
Saludos y gracias :hola:

cpmario:
En VB6 uso esta rutina

--- Código: Text --- Private Sub Text1_KeyPress(KeyAscii As Integer)   Dim strValidChars As String   Dim strTitle As String   Dim strCharLetter As String   strCharLetter = UCase(Chr$(KeyAscii))   'Cambiando strValidChar se puede usar para filtrar   'cualquier conjunto de caracteres   strValidChars = "0123456789.,"   If InStr(strValidChars, strCharLetter) Then       KeyAscii = Asc(strCharLetter)   ElseIf KeyAscii = 8 Or KeyAscii = 13 Then   Else       'Opcional, si deseas darle un aviso al usuario       'Lo puedes eliminar       strTitle = "+ Convención +"       MsgBox "Escriba solo números, puntos o comas.", vbInformation, strTitle       KeyAscii = 0   End IfEnd Sub 
Puedes cambiar la línea

--- Código: Text --- strValidChars = "0123456789.," Por cualquier cadena de texto que desees validar por ejemplo:

--- Código: Text --- strValidChars = "SCVDUscvdu" Para validar el estado civil de una persona, Soltero, Casado, Viudo, etc.
 :comp:

Nebire:
Es más cómod usar la función 'IsNumeric'. Esta función eválua una expresión y devuelve un valor buleano que indica si se puede tomar como número.

entonces un código podría ser algo así como:

--- Código: Text ---    static textoAnterior as boolean    if IsNumeric(textBox1.text) then       '...  acciones que deseamos hacer             textoAntiguo=textbox1.text   else       textbox1.text=textoAnterior   end fi  
La parte de 'else' no determina que sean sólo texto sólo que la expresión no puede valorarse como numérica, sin embargo puede aprovecharse para no repetir código añadiendo más cófigo y diferenciando la validación de cuando se pide valorar sólo números o sólo letras.
En tonces el código enterior embebido en una función sería algo como:


--- Código: Text ---   public function evaluar_TextoComo(modo as boolean, texto as string) as boolean      dim resultado as boolean           if IsNumeric(texto) then            resultado=true      else           for k=0 to 9                 If InStr(1, texto, cstr(k))<>0 Then                      exit function                end if                          next           resultado=true ' si no salió al llegar aquí, no se encontró números, es ok.      end if        evaluar_TextoComo=resultado and modo  end function  
En vb ila función 'IsStr' permite buscar una cadena dentro de otra, si se existe devuelve la posición donde empieza la coincidencia, por ellos usa 3 parámetros, el primero es para indicarle la posición del carácter desde el que queremos iniciar la búsqueda, los otros son la cadena donde buscar y la cadena que se busca...

Nuestro amigo cpMario ha cometido un pequeño lapsus, ya que si le pasamos la cadena "0123456789" como cadena a buscar intentará encontrar ese texto exacto y no cualquiera de los caracteres que contiene, por ello es necesario usar un bucle o intentar otra función más compleja...


No sé en 'gambas' pero visual Basic, hay que tener a veces cuidado con los puntos y las comas, ya que en español se usan de modo inverso al inglés y determinadas funciones pueden 'comportarse' de un modo no esperado. Si es el caso, conviene añadir código para controlarlo...

Ignoro si en 'gambas' la función IsNumber' que utilizas determina sólo si es un valor numérico o si se puede interpretar como tal, si es el primer caso, puedes implementar la función 'IsNumeric' con una sencilla  función como la siguiente:


--- Código: Text ---    public function IsNumeric(texto as string) as boolean       dim v as double        on error goto noNumerable       v= texto /2       isNumeric=true       exit function   noNumerable:   'sale con valor false          if val(texto)<>0 then IsNumeric=true   end function  
El mecanismo de esta función se basa en que si no no se puede cuantificar como número se origina un error .  hay 3 casos posibles: todo el texto sean números: ejmplo: "3456734",  en los demás casos dará error, pero todavía se acptarán como válidos aquellos que empiecen por números.
esto: "3456123" devolcerá true
esto: "dfjghd999" devolverá false
esto: "3456asjfht" devolverá true
esto: "0" devolverá true

zaida20:
Muchas gracias por contestar, al final he conseguido solucionarlo asi:


--- Código: Text ---'''''Solo numeros enteros******************PUBLIC SUB TextBox3_Change()    CInt(textbox3.Text)'Convierte el numero en entero   CATCH  textbox3.Text = Mid$(textbox3.Text, 1, -1)'Si no es un numero borra el caracter  STOP EVENT  END 'Formato numero decimal ******************************************************PUBLIC SUB TextBox4_Change()   CFloat(textbox4.Text)   CATCH  textbox4.Text = Mid$(textbox4.Text, 1, -1)  STOP EVENT END 'Solo letras*********************PUBLIC SUB TextBox5_KeyPress()  IF Key.Code <> 8 THEN     IF (Key.Code < 65) OR (Key.Code >90 ) THEN     STOP EVENT     ENDIF END IF END 
Saludos  :hola:

cpmario:
Te agradezco nos ilustres en GAMBAS


Esto va para Nebire

Me disculpas pero el lapsus lo has cometido tu.
Ya que

--- Código: Text ---If InStr(strValidChars, strCharLetter) Then  Hace el trabajo de localizar cualquiera de los caracteres anotados en la cadena.

Esa rutina es la que uso para detectar cualquier conjunto de caracteres que deseo filtrar.

En todo caso lo que tienes que hacer es colocar la rutina en el evento de un TextBox y ver si funciona
 :comp:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa