Bloqueo y desbloqueo de un campo texto

Tengo un formulario cuya función es la de consultar o modificar los registros de una tabla. El formulario consta de varios campos de texto donde recoge la información de los campos de cada registro, mi intención es poder bloquear los campos de texto y solo poder actualizarlos cuando el cursor está encima de dicho campo y presionas un botón "Actualizar", en ese momento se desbloquearía para poder escribir en él y una vez el cursor cambia a otro campo de texto volvería a bloquearse.
Yo sé que hay una propiedad en el campo texto que es "bloqueado", supongo que en el evento del botón habría que poner el código necesario para que funcione.

1 respuesta

Respuesta
1
Si claro como tu dices... la propiedad esta en la ficha datos (de las propiedades de la caja de texto)... entonces colocas la propiedad bloqueado en si...
Ahora en el evento Click del botón.. colocaras (imaginemos que la caja de texto se llama Texto1):
***********************
Text1.Locked = False
***********************
Esta propiedad es la de bloqueado, como se coloca en False, queda desbloqueado... ahora, cuando el cursor se vaya de la caja (esto se conoce como perder el enfoque) entonces en el evento Al Perder elEnfoque (LostFocus) de la caja de texto se colocara:
************************
Text1.Locked = True
***********************
Ahí quedara otra vez bloqueada..
Att:telemaco
Gracias, lo he podido entender. El problema que se me plantea ahora, es que tengo más de 50 campos Text y tendría que repetir el evento LostFocus y Locked tantas veces como campos tengo.
Hay algún método que al hacer click en el botón, ¿supiese qué el cursor este en el campoText28 y unicamente desbloqueara ese y al cambiar de campo se volviera bloquear?
Si claro, de esta forma:
**********************
Dim MiControl As Control
for each ctl in me.Controls
if TypeOf ctl is TextBox
ctl.Locked = true
End If
Next ctl
Set MiControl = Screen.PreviousControl
MiControl.Locked = False
****************************
El for each sirve para recorrer los controles (esta sintaxis, es un for "especial" para recorrer colecciones), el typeof, pregunta que si el tipo es "textbox"...
La instrucción:
Screen. PreviousControl
Es para capturar en control anterior que tenia el enfoque..
Att:telemaco
Genial! Muchísimas gracias, ya solo pedirte si no es tanta molestia el que cuando pinche "Yes" al MsgBosx el cursor vaya a la caja texto que quiere modificar. El código que hasta ahora he dejado es este:
******************************
Dim MiControl As Control
If MsgBox("Esta seguro de querer modificar", vbYesNo) = vbYes Then
For Each ctl In Me.Controls
If TypeOf clt Is TextBox Then
ctl.Locked = True
End If
Next ctl
Set MiControl = Screen.PreviousControl
MiControl.Locked = False
End If
****************************
Un saludo
Es utilizando el mismo código:
*************************
Dim MiControl as control
Set MiControl = Screen.PreviousControl
If MsgBox("Esta seguro de querer modificar", vbYesNo) = vbYes Then
MiControl.Locked = False
MiControl.SetFocus
End If
*****************************
La instrucción que mande el enfoque (el cursor) es setfocus...
Att:telemaco
HAber parav hacer referencia a campos de un subformulario, debes invocarlo con la propiedad form, y luego los controles, es decir, imaginemos que el subformulario se llama MiSubForm, y vas hacer la rutina for each para bloqueo, entonces seria así:
*************************
For Each ctl In MiSubForm.Form.Controls
If TypeOf clt Is TextBox Then
ctl.Locked = True
End If
Next ctl
*******************
Como ves Me. Controls se cambio por MiSubForm. Form. Controls
Porque como los controles están en el subformulario entonces debemos nombrarlo, la propiedad form, es para indicar que tomaremos una propiedad (controls) que pertenece si fuera formulario..
Att:telemaco

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas