Varios Texbox Con El Mismo Evento!!


Ir a la página 1, 2  Siguiente

Objetivo: Varios Texbox Con El Mismo Evento!!
Estoy realizando un formularion con varios textbox, el cual con keypress voy saltando con la tecla ENTER, eso funciona de maravilla, pero quiero tambien hacer que en cada textbox pueda validar si agunos textbox pueda escribir LETRAS y en otras NUMEROS. Aqui le dejo parte del codigo:
PUBLIC SUB gEnter_KeyPress() 'Para hacer solo LETRAS
IF Key.code = Key.enter OR Key.code = Key.return THEN
SELECT CASE LAST.tag
CASE 1
Label1.Text = TextBox_codigoPostgrado.Tag
TextBox_codigoPostgrado.setfocus

CASE 2
TextBox_lapsoInscribir.setfocus

CASE 3
TextBox_Apellidos.setfocus

CASE 4

TextBox_Nombres.SetFocus

CASE 5
TextBox_cedula.SetFocus

CASE 6
TextBox_pasaporte.SetFocus

CASE 7
TextBox_email.SetFocus

CASE 8
TextBox_telefono.SetFocus

CASE 9
TextBox_dirHabitacion.SetFocus

END SELECT
END IF

END

Gracias por su ayuda soy nuevo en gambas y necesito ayuda.

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Para que usen todos el mismo evento, símplemente agrúpalos todos en el mismo grupo (propiedad group del control)
Lo de números y letras... busca por este mismo foro, que recuerdo varios hilos donde se tocaba ese tema.

Bienvenido, pasa al fondo y págate una cerveza.

Saludos.

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Gracias, shordi, yo se q aqui hay bastane topico sobre el tema de validacion de texbox, lo q pasa es que si lo coloco dentro del evento keypress no funciona ejemplo......
PUBLIC SUB gEnter_KeyPress() 'Para hacer solo LETRAS
IF Key.code = Key.enter OR Key.code = Key.return THEN
SELECT CASE LAST.tag
CASE 1
IF IsNumber(Val(Key.Text)) = FALSE THEN
ELSE
Message.Info("Solo letra")
STOP EVENT
END IF
TextBox_codigoPostgrado.setfocus


CASE 2.................................

Sencillamente no me funciona, y se lo colo asi, tambien no funciona:
PUBLIC SUB TextBox_codigoPostgrado_KeyPress()
IF IsNumber(Val(Key.Text)) = FALSE THEN
ELSE
Message.Info("Solo letra")
STOP EVENT
END IF

END
Esto tratando de hacer el evento aparte, solo el objeto textbox solo.

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Hola
Tu pones todos los textboxes en el mismo grupo.
A cada uno le pones un tag según el tipo de teclas válidas que deba admitir.
Por ejemplo
textboxes de nombres, direcciones tag 1
textboxes de cifras tag 2
textboxse para valores matemáticos (cifras, signo -,, signo coma, signo punto) tag 3
textboxes de teléfonos (númeos mas espacios) tag 4
textboxes para fechas (cifras, y caracteres separadores /.: tag 5

Una vez hecho eso tu haces el keypress tal como sigue
private sub grupo_keypress()
select case last.tag
case 1:
...
...
case 2:
...
...
case 3:
...
...
case else
... aquí consideras flechas, AvPag, RePag, enter, backspace, tab, sup, insert, inicio, fin
end select


Un saludo

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Gracias SOPLO, cre entender tu sugerencia, pero me sale una duda, si viste el codigo q coloque como inicio de este tema, es para controlar q desde la tecla ENTER o TAB yo pueda saltar de caja en caja (textboxes), COMO HAGO ESO??, segun tu sugerencia, estoy armando un codigo pero con keyrelease() y hasta el meomento me va, es algo asi:

PUBLIC SUB gEnter_KeyRelease()
Label1.Text = TextBox_denominacionPostgrado.Text
IF IsNumber(Val(TextBox_denominacionPostgrado.Text)) = FALSE AND IsNumber(Val(TextBox_Apellidos.Text)) = FALSE THEN
ELSE
Message.Info("Solo LETRA")
STOP EVENT
END IF

END

Funciona, pero laidea de la PROGRAMACION es asi el codigo mas eficiente,y se puedo hacerlo en un SOLO BLOQUE mejor.

QUE ME SUGIERES????

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Veo ahí algunas cosas raras:

La función val siempre devuelve un número (bueno, a veces un booleano, pero isNumber siempre te devolverá cierto).
luego
isnumber(val(

siempre te dará cierto.

Por otra parte me parece muy raro eso de
IF IsNumber(Val(Key.Text)) = FALSE THEN
ELSE
¿Por qué no preguntas por TRUE y te ahorras el else?

Si el estándar del GUI es que el paso de campo a campo es con TAB ¿por qué ese empeño del Enter que todo te lo complica?

Y por último: si preguntas si key.code es enter y ya lo sabes... ¿para qué preguntas si es número?

última edición por shordi el Miercoles, 24 Noviembre 2010, 20:50; editado 1 vez
Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
mi respuesta de arriba es al código de la segunda respuesta... que nos hemos cruzado.

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Suele pasarno shordi je je je

Citar:
PUBLIC SUB gEnter_KeyRelease()
Label1.Text = TextBox_denominacionPostgrado.Text
IF IsNumber(Val(TextBox_denominacionPostgrado.Text)) = FALSE AND IsNumber(Val(TextBox_Apellidos.Text)) = FALSE THEN
ELSE
Message.Info("Solo LETRA")
STOP EVENT
END IF

END

Este código está mal. Te pongo lo que creo que quieres hacer correctamente
public sub gEnter_keyrelease()
if isnumber(key.text) then
...
else
...
endif
end


yo hago lo de los tag que te dije. De hecho tengo hecha una clase para control del teclado que me soluciona estos problemas corrientes y si quieres te la pongo para que la tomes como ejemplo. Un keypress corriente suele ser
dim valido as boolean=false
select case last.tag
case 1
valido = TEC.EsLetra(key.text) 'y esto me devuelve true o false
case 2
valido = TEC.Esfecha(key.text) ' esto me devuelve true o false
case ...
end select
if not valido then
stop event
endif


Ahora bien tu quieres hacer como en VB el setfocus. Quieres que al pulsar Enter se pase el foco al siguiente control. Eso tengo que probarlo (ahora no tengo tiempo, mas tarde quizá) pero en principio podrías usar el método next que te pasa al siguiente control
case key.code=key.REturn
last.next

algo así.

Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Pero que lío me he 'montao' leyendo.

Espero responder a lo que pretendes.

(* Una cosa que igual no sabes. Al pulsar enter en un textbox, se produce el evento activate)
(Pero no se produce al pulsar Return, que son distintos)

Tenemos varios textbox y su propiedad Tag que nos dice si son solo números. Además al pulsar enter quiero que
se mueva el foco.

¡Cuidado con textbox.next.setfocus! Si lo siguiente que tienes es un label, por ejemplo, CRASH. Tienes que fijarte en la pestaña jerarquía que hay al lado de propiedades que van uno tras otro en el orden que quieres que tomen el foco.

Para muestra te propongo lo siguiente. Una función en un módulo que controle que la tecla pulsada es numérica y/o con decimales y otra que me diga si se ha pulsado Enter/Return:

PUBLIC FUNCTION onlynum(OPTIONAL ndec AS Integer = 0) AS Boolean

DIM respuesta AS Boolean
DIM txt AS TextBox

txt = Application.ActiveControl
respuesta = FALSE

SELECT CASE Key.Code

CASE 48 TO 57 'Codigos ASCII de los numeros
IF ndec > 0 THEN
IF InStr(txt.Text, ".") > 0
IF Len(Right(txt.Text, - (InStr(txt.Text, ".")))) > ndec - 1 THEN
respuesta = TRUE
ENDIF
ENDIF
ENDIF
IF txt.Selected THEN respuesta = FALSE
CASE Key.BackSpace 'Retroceso
CASE Key.Delete 'Borrado
CASE Key.Tab 'Tabulador
CASE Key.BackTab 'Tabulador hacia atras
CASE Key.Return OR Key.Enter
CASE Key.Home
CASE Key.End
CASE Asc(".")
IF ndec = 0 THEN respuesta = TRUE
IF InStr(txt.Text, ".") > 0 THEN respuesta = TRUE
IF respuesta = FALSE AND Len(txt.Text) = 0 THEN
txt.Text = "0"
ENDIF
IF txt.selected THEN
txt.Text = "0"
respuesta = FALSE
ENDIF
CASE ELSE
respuesta = TRUE 'Si se ha pulsado otra tecla

END SELECT

RETURN respuesta

END

PUBLIC FUNCTION kEnter() AS Boolean

RETURN (Key.Code = Key.Enter OR Key.Code = Key.Return)

END

PUBLIC SUB amayusculas(txt AS TextBox)

DIM nPosicion AS Integer

nPosicion = txt.Pos 'Guardamos la posicion del cursor
txt.Text = Upper(txt.Text) 'Convertimos el texto a mayusculas
txt.Pos = nPosicion 'Restauramos la posicion del cursor

END



En el evento _keypress del/os textbox que lo requieran (buena la idea de agruparlos).
PUBLIC SUB grupoText_KeyPress()

IF mUtils.kEnter() THEN '--------------------- Se ha pulsado enter
LAST.Next.SetFocus
ELSE
SELECT CASE LAST.tag
CASE 1 ' Solo admite números
IF mUtils.onlynum() THEN STOP EVENT
CASE 2 ' Admite solo numeros pero con 2 decimales
IF mUtils.onlynum(2) THEN STOP EVENT
CASE 3 ' Pasa todo a Mayúsculas
mUtils.amayusculas(LAST) ' YO ESTO LO PONDRIA EN EL EVENTO CHANGE
' Y TODOS LO CASE QUE SE TE OCURRAN Y SEAN LOGICOS POR SUPUESTO
END SELECT
END IF

END



Conste que yo por no enrevesar con lo del grupo de textbox, lo tengo así:
PUBLIC SUB txtpvp_KeyPress()

IF mUtils.kEnter() THEN
txtpvp.Next.SetFocus
RETURN
ENDIF
IF mUtils.onlynum(4) THEN STOP EVENT

END


y para cada control manejo el evento KeyPress, Change, LostFocus(este con cuidado), GotFocus..........

Como verás aquí no existe la propiedad de VBA tabOrder ni nada parecido.

Espero te sirva de algo la explicación o por lo menos te aporte alguna idea.

Antonio

última edición por ahtonio el Miercoles, 24 Noviembre 2010, 22:43; editado 1 vez
Perfil MP  
Objetivo: Re: Varios Texbox Con El Mismo Evento!!
Gracias SOPLO, lo probare y te aviso, mañana en esto momento salgo de la oficina. Saludos y mil gracias

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4558s (PHP: -61% SQL: 161%)
Consultas SQL: 47 - Debug off - GZIP Activado