Control indomito

10/03/2006 - 08:50 por Desastres | Informe spam
Buenos días.



Tengo un problema viejo con los controles de un formulario que no he aprendido a controlar.



Cuando hay algún error que puedo controlar, utilizo otro formulario portador de un textbox como
formulario informador para informar al usuario( es decir a mi), luego pongo la propiedad Cancel True y para que no se escape del control del primer formulario, del formulario informador.

Y no se escapa. Lo sé porque cada vez que intento salir del formulario de trabajo, el formulario
informador me comunica el error que se produce antes del Cancel=True .



(Pero en realidad ha salido del control porque se ha ejecutado el formulario informador, se ha
llenado el textbox del formulario informador y se ha descargado[a veces] el otro formulario
informador)



El problema es que no se ha descargado o al menos no se ha quitado de la pantalla ( en segundo
plano).

Lo cierto es que estando dentro (teóricamente del control con el error) del formulario de trabajo si
tecleo cualquier cosa no se ve reflejado en el Control. Para conseguirlo tengo que Clicar primero en
él.

¿Puede alguien decirme en que he metido la pata hasta el corbejo?



Saludos cordiales,

Des

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
10/03/2006 - 09:39 | Informe spam
hola, Des !

Mostrar la cita
sin 'ver' los codigos y los eventos que estas manejando en los controles de ambos formularios ???
[probablemente] algun codigo en los eventos '_exit' o procedimientos 'auxiliares' de verificacion -?-
teoricamente... al mostrar un subformulario, al cerrar el segundo y regresar al primero... regresas al mismo control donde estabas ;)
a menos que... ???
por que no expones los codigos que estas usando [y los criterios que esperas que 'entiendan' los controles] :))

saludos,
hector.

el siguiente ejemplo usa dos formularios:
formulario 1: dos controles textbox y un control commandbutton
formulario 2: un control textbox y un control commandbutton

en el modulo de codigo del formulario 1 ==Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 = "" Then
UserForm2.TextBox1 = "Error en el TextBox1"
UserForm2.Show
Cancel = True
End If
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2 = "" Then
UserForm2.TextBox1 = "Error en el TextBox2"
UserForm2.Show
Cancel = True
End If
End Sub

en el modulo de codigo del formulario 2 ==Private Sub CommandButton1_Click()
Unload Me
End Sub
#2 Desastres
10/03/2006 - 12:53 | Informe spam
Hola Héctor. Gracias

¿ Te digo buenos días o buenas noches?

Con lo que me mandas, me pasa casi igual que con lo que tengo.

La única diferencia es que el formulario de comunicación, se descarga efectivamente. No se queda
solapado detrás del Formulario Principal?

Pero al descargarse el formulario de información , presentarse de nuevo el formulario principal y
teclear cualquier cosa, no se refleja, en ninguno de los dos textbox del formulario principal ( en
el que corresponda cada vez).

Saludos
Des

"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
como... informador
Mostrar la cita
formulario, del... informador.
Mostrar la cita
error... antes del Cancel=True
Mostrar la cita
formulario informador)
Mostrar la cita
plano).
Mostrar la cita
trabajo
Mostrar la cita
primero en el.
Mostrar la cita
ificacion -?-
Mostrar la cita
regresas al mismo control donde estabas ;)
Mostrar la cita
controles] :))
Mostrar la cita
#3 Héctor Miguel
10/03/2006 - 18:33 | Informe spam
hola, Des !

Mostrar la cita
vez).

esa 'sencilla' palabra que utilizaste... -> 'casi'
pudiera 'hacer' que 'la unica diferencia' adquiera otror 'matices' [por los detalles no comentados] :D [p.e.]

1) es posible que el 'Formulario principal' lo estes 'mostrando' en forma NO .modal ?
p.e.: -> UserForm1.Show vbModeless

2) es [realmente] 'necesario' informar al usuario por medio -> de otro formulario ?
al 'regresar' al formulario principal, el control 'activo' NO pierde el foco, pero su re/activacion no es tan 'sencilla'
:-(

3) si no es necesario el SUB-formulario ['informativo']...
podrias usar un MsgBox [para informar al usuario del error] en lugar del formulario secundario ;) [p.e.]
en el modulo de codigo del formulario principal, en los eventos de los controles textbox... ==Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 = "" Then
MsgBox "Error en el TextBox1"
Cancel = True
End If
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2 = "" Then
MsgBox "Error en el TextBox2"
Cancel = True
End If
End Sub

4) pudiera haber otros 'factores' involucrados... [pero no conozco el codigo ni los procedimientos de verificacion] :_(

comentas algun detalle mas... 'significativo' ?
saludos,
hector.
#4 Desastres
14/03/2006 - 00:36 | Informe spam
Hola Héctor. Gracias.

Mostrar la cita
comentados] :D [p.e.]
Mostrar la cita
showmodal=true

Mostrar la cita
No es imprescindible, Pero un Msgbox esta bien para un sí , un NO, un Cierra el libro y poco más.
Es poco legible y menos afable. Creo que el limite son 256 caracteres y yo hablo ( solo con migo
mismo) hasta por los codos.
Sé que está forzado el uso del Formulario, pero es la única forma de aprender.
Por otro lado, esta diseñado (aunque mal) con un par de Boolean para utilizar la respuesta.( ya se
que existe un Inputbox)

Mostrar la cita
re/activación no es tan 'sencilla'
Mostrar la cita
Hay algo que lo complica quizás un poco más. Teóricamente no debería salir del Control. pero sale.
Y sin aparentemente ejecutarse el Exit del control. ( ¿o es que no está dentro?)



Mostrar la cita
;) [p.e.]
Mostrar la cita
==> Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Mostrar la cita
Por cierto, esto a mi no me funciona. Pierde la capacidad de re activacion.

Mostrar la cita
de verificacion] :_(

El formulario de trabajo como es "dinámico"( lo voy haciendo a ratos y no me acuerdo de lo que hice
el año anterior) , hace falta depurarle, no te lo mando porque pesa casi 2000 líneas . además de
llamar a algunos procedimientos externos. Y eso es un peñazo, y me da apuro.
Por otro lado, ten en cuenta que en parte esta creado en modo diseño y modificado en modo
ejecución, por lo cual te tendría que mandar todo el formulario(exportado) ( aunque le quitara un
millar de líneas, sigue siendo un peñazo).

Mostrar la cita
no sé que mas podría decirte. ( que se parece a los hombres, se rebela contra su "creador")( vaya
noche que llevo)


Saludos
Des
#5 Héctor Miguel
14/03/2006 - 04:17 | Informe spam
hola, Des !

Mostrar la cita
=> showmodal: true ES como se establece [por omision] en la ventana de propiedades del formulario...
el 'como' lo muestres [por alguna macro] es lo que podria 'hacer la direrencia' [p.e. UserForm1.Show vbModeless]
sobre todo, si como mencionas que el formulario 'desaparece' y 're-aparece' posteriormente [otro codigo lo muestra]

Mostrar la cita
=> el limite de un MsgBox es de 1024 caracteres, -> procura 'acotar' con saltos de linea adecuadamente [vbCR] en el texto ;)

Mostrar la cita
=> [hasta ahora] la unica forma en que he logrado 'reproducir' el comportamiento que decribes...
es usando una macro que muestre el formulario como 'NO modal' -> UserForm1.Show vbModeless
y 'manejando' el evento '_exit' del control para 'impedir' su salida [como 'resultado']..
'el foco' SE QUEDA en el control PERO... como 'tras bambalinas' [es decir]...
un -> MsgBox Me.ActiveControl.Name 'me dice' que el foco SI esta en el control [pero como 'inactivo']
y SOLO cuando el formulario [principal] se ha mostrado como -> vbModeless <= OJO
=> ademas, considera [como mencionas al final] que se trata de 2000 lineas de codigo MAS llamadas a procedimientos 'externos' :))

[creo que] no te escaparas de 'revisar' en esas 2000 lineas de codigo :-(
o... exponer [al menos] las lineas donde se hagan llamadas al formulario y sus controles -?-

saludos,
hector.
Ads by Google
Search Busqueda sugerida