FoxPro/Visual FoxPro - como cambiar el foco de un textbox a un command button

 
Vista:
sin imagen de perfil

como cambiar el foco de un textbox a un command button

Publicado por oscar (4 intervenciones) el 18/04/2017 21:46:26
buenas tardes

Ojala alguien me pueda ayudar. Estoy haciendo un form en visual foxpro 6 y en este form tengo varios elementos, que van desde grids, text box, command button y mas. En total son 19.

Cuando leo el text box numero 19, el foco se pasa automaticamente al text box 1, y yo necesito que se vaya al command group numero 7

El nombre del command group 7 es: cmgOp2 y el control source es m.opcmov

ya lo intente con esta linea en el valid del text box 19, pero no funciona
_curobj=objnum(m.opcmov)

tambien con
_curobj=7

que debo de poner y en donde para que se vaya el foco al command group 7?

Les agradezco infinitamente su ayuda.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

como cambiar el foco de un textbox a un command button

Publicado por Fidel José (657 intervenciones) el 18/04/2017 23:56:40
Si no has desordenado el Commandgroup debería funcionarte:
*< Text19.LostFocus (Event) >
* Otros comandos
Thisform.cmgOp2.Buttons(7).SetFocus()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

como cambiar el foco de un textbox a un command button

Publicado por oscar (4 intervenciones) el 19/04/2017 01:45:12
Fidel Jose:
muchas gracias, ya quedó con tu ayuda.
ahora la pregunta es,

Hay alguna manera de decirle que le pase el foco a ese command button group sin que le indique que es el numero 7?
es decir, se puede utilizar la variable de control source o el nombre del command group? Esto por si en algun momento le cambio numero de tab
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

como cambiar el foco de un textbox a un command button

Publicado por Fidel José (657 intervenciones) el 19/04/2017 14:34:06
No debes confundir el número de TabIndex con el número del conjunto buttons(). Son cosas distintas:
El número de button depende del orden de construcción del commandgroup y no cambia. El TabIndex indica cómo debe moverse el puntero del mouse como respuesta a la tecla TAb, Enter o las flechas. De manera que puedes cambiarle el orden de tabulación pero eso no altera ni los nombres de los objetos (Name) ni la estructura de cada objeto compuesto (commandgroup, optiongroup, pageframe, grid).
También puedes hacer referencia al Name del objeto, pero esto si puede cambiar:
Thisform.cmg_x.Command1.SetFocus(). Si al primer botón le cambias el nombre, esto ya no funcionará y, en cambio, seguirá funconando Thisform.cmg_x.Buttons(1).SetFocus().

Por ejemplo, puedes crear una método en el formulario para que dé una respuesta de foco variable. Dependiendo de la respuesta del misterioso proceso "Do_Proceso" el foco puede ir hacia un objeto determinado. Para eso, creamos una variable que contendrá la referencia al objeto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LPARAMETERS tcStatus
LOCAL loFocus as Object
lnResp = Do_Proceso(m.tcStatus)
DO CASE
	CASE ISNULL(m.lnResp)
		loFocus = this.cmg1.Buttons(1)
	CASE m.lnResp = 1
		loFocus = this.cmd_paste_gentag
	CASE m.lnResp = 2
		loFocus = this.edt_gen1
	OTHERWISE
		loFocus = this.cmg1.Buttons(3)
ENDCASE
IF VARTYPE(loFocus)="O"
	loFocus.Setfocus()
ENDIF
loFocus = null
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como cambiar el foco de un textbox a un command button

Publicado por oscar (4 intervenciones) el 19/04/2017 16:37:56
Buen dia

Fidel gracias por tu ayuda.

Esto es lo que sucedio.

En el valid de mi Textbox puse


con esta linea: Thisform.cmgOp2.Buttons(7).SetFocus() me marca error diciendo "BUTTONS is not an object"

con esta otra: Thisform.cmgOp2.SetFocus() me marca error diciendo "Property SETFOCUS is not found"

recuerda que:
la variable de control se llama m.opcmov
y el commandgroup se llama cmgOp2

tal vez no lo debo poner al final del valid, y lo deba de poner en otro lado

No se...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

como cambiar el foco de un textbox a un command button

Publicado por Fidel José (657 intervenciones) el 19/04/2017 23:34:28
El evento Valid no admite SetFocus, ni dentro del método ni en cualquier method, procedure o function dependiente de Valid.
Si necesitas enviar el foco dentro del evento valid, puedes utilizar
RETURN thisform.TalObjeto

Ahora, hay varias cosas que no estan claras:
1) cmgOp2 es verdaramente el nombre de un Commandgroup, o es el nombre de un botón dentro dle commandgroup?
2) El commandgroup tiene 7 botones?
3) Parece que le has puesto un ControlSource="m.opcmov". La única forma de que eso funcione es que opcmov sea una variable pública. Si es así, ya te digo que es una mala idea, aunque no tiene absolutamente nada que ver con el SetFocus. Si crees que vale la pena utilizar un controlSource para un commandgroup, utiliza una propiedad del formulario (yo no me imagino para qué necesitas ese controlsource).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

como cambiar el foco de un textbox a un command button

Publicado por oscar (4 intervenciones) el 20/04/2017 01:43:33
Fidel

En serio agradezco toda tu ayuda y atencion sobre mi caso.

ya por fin quedo bien. No se si sea la manera correcta de hacerlo, pero funcionó y esa informacion de que el valid no acepta setfocus me resolvio el problema.

dentro del valid le puse RETURN thisform.cmgop2 porque el command group asi se llama.

Como me preguntabas, cada boton dentro del command group tiene un nombre diferente.

Despues de hacer eso me marco error de nuevo. Entonces finalmente le puse RETURN 7

Porque el command group tiene el tabindex 7 como comente al inicio y ya quedo funcionando

Me imagino que debe de haber una manera mas profesional de hacerlo, es decir, utilizando las propiedades y funciones del lenguaje, pero con la marcha ire aprendiendo un poco mas. Hace 25 años (en 1992) aprendi a programar en fox pro 2.5. En 1996 empece a migrar a foxpro win. y desde el 2000 no he vuelto a programar hasta ahora. El cambio a Visual Foxpro 6 (y despues de 17 años de no haber hecho absolutamente nada de programacion) me ha resultado un poco complicado, pero ahi va.

De nuevo te agradezco toda tu ayuda, que la verdad sea dicha, sin ella no hubiera podido sacar este detalle. Te amenazo (jajaja) que voy a seguir haciendo preguntas, porque una pantalla que necesito hacer va a leer un nombre y va a buscar ese directorio. Si no existe lo tiene que crear y copiar ahi una base de datos vacia de informacion. Si ya existe, tiene que cargar la base de datos y empezar a manipularlas. Por lo que va para largo.

Saludos y gracias de nuevo

Oscar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

como cambiar el foco de un textbox a un command button

Publicado por Fidel José (657 intervenciones) el 20/04/2017 14:59:17
Solamente para decirte que en la instrucción:
RETURN thisform.TalObjeto
TalObjeto debe ser un objeto capaz de recibir enfoque, por lo que en tu caso podría ser:
RETURN Thisform.cmgOp2.Boton_Name (donde Boton_Name debe reemplazarse por el nombre del botón del commandgroup).
Lo que no recuerdo precisamente, es si este modo de uso del RETURN estaba disponible en Visual FoxPro 6.0

Poner RETURN 7 no es muy aconsejable. En principio significa que el enfoque irá a parar al objeto que esté 7 TabIndex más adelante que el objeto que produce el Valid Event. Esto no tiene que ver conque tenga 2, 3 o 7 botones. Si el objeto de referencia es un commandgroup supuestamente tomará el foco del primer TabIndex dentro del Commandgroup.
No es aconsejable porque cualquier cambio en los TabIndex del form que se produzca más adelante, te creará un problema a solucionar.

De todos modos, tienes que tener muy precente cómo se suceden los eventos dentro de cada control.
Para un textbox, normalmente tenemos este orden:
1) When
2) GotFocus
3) Intervención del usuario
4) KeyPress
5) InteractiveChange
6) Puede haber o no otra intervención del usuario (depende de que se complete el campo y tenga salida automática o se digite Tab o Enter o alguna de las formas de cambiar de campo)
7) Valid
8) LostFocus

Después del Valid, siempre se produce el LostFocus, con la sola excepción de que ese evento valid se produca la instrucción:
RETURN 0
en cuyo caso el control no pierde el enfoque y permite corregir la entrada.

De ahí hay que derivar, al menos, dos cosas
1) Que, atendiendo el caso en que se necesita RETURN 0, el resto de los redireccionamientos de focos se puede trasladar al lostfocus.
2) Es preciso tener en cuenta si el código colocado en el LostFocus se debe o no se debe ejecutar cuando se redirecciona el foco a otro objeto, lo que depende exclusivamente del diseño de la interfaz y de lo que pretenda el programador.


Con respecto a Visual FoxPro 6.0, revisa que tengas instalado el Service Pack 5 (el último que salió) y por supuesto, tengo que aconsejarte que trates de conseguir Visual FoxPro 9.0 con Service Pack 2, porque tiene muchas mejoras y soluciones importantes.

Entre los cambios más importantes para mi modo de ver (además del Reporteador que no tiene nada que ver con la versión 6), son:
Funciones:
ALINES() Pasa de ser una función irrelevante a una función importantísima en el anáisis de listas
GETWORDCOUNT() y GETWORDNUM() (nuevas) simplifican el análisis de listas.
BINDEVENT() (nuevo en VFP 8) Algo extraordinario. Por esto solo, vale la pena el VFP 9
RAISEEVENT() (nuevo en VFP 8) Algo fantástico si se entiende el modelo de objetos.
ADIR() tiene alguna mejora, al permitir leer los nombres de archivos tal como figuran en el disco.
ASCAN() permite búsqueda exacta sin tener que recurrir a SET EXACT
STRTOFILE() FILETOSTR() Y STREXTRACT() funcionan de maravilla.

Estructuras y otros
SELECT SQL permite generar cursores Readwrite, con lo cual ya no se necesitan las tablas temporales.
La estructura TRY / CATCH / FINALLY / ENDTRY, fundamental en el manejo de errores.
A esto hay que agregarle todo lo concerniente a manejo de XML
También el menú con imágenes que ya estaba desde VFP 7 y el IDE (también desde VFP7) que ayuda enormemente al escribir código nativo.

Y hay más, que ahora no tengo presente. Visual FoxPro 9 funciona en cualquer versión de Windows sin problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Leonardo Daniel A.
Val: 1.115
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

como cambiar el foco de un textbox a un command button

Publicado por Leonardo Daniel A. (498 intervenciones) el 19/04/2017 06:41:45
Porque no usas el TabIndex, para cada objeto...asi cada que das enter o tab, brinca al siguiente control en el indice, puedes usar

thisform.tucontrol.setfocus() para cambiarte a un objeto, pero solo en casos especiales, no lo debes usar mucho, ensucias mucho el codigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar