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 !

... problema viejo con los controles de un formulario que no he aprendido a controlar.
Cuando hay algun error que puedo controlar, utilizo otro formulario portador de un textbox como... informador
... luego pongo la propiedad Cancel = True y para que no se escape del control del primer formulario, del... informador.
... cada vez que intento salir del formulario de trabajo el ... informador me comunica el error... 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 (teoricamente 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 el.
... en que he metido la pata hasta el corbejo?



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
Respuesta Responder a este mensaje
#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:
hola, Des !

> ... problema viejo con los controles de un formulario que no he aprendido a controlar.
> Cuando hay algun error que puedo controlar, utilizo otro formulario portador de un textbox


como... informador
> ... luego pongo la propiedad Cancel = True y para que no se escape del control del primer


formulario, del... informador.
> ... cada vez que intento salir del formulario de trabajo el ... informador me comunica el


error... 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 (teoricamente 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 el.
> ... en que he metido la pata hasta el corbejo?

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


ificacion -?-
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


Respuesta Responder a este mensaje
#3 Héctor Miguel
10/03/2006 - 18:33 | Informe spam
hola, Des !

Con lo que me mandas, me pasa casi igual que con lo que tengo.
La unica diferencia es que el formulario de comunicación, se descarga efectivamente.
No se queda solapado detras del Formulario Principal?
Pero al descargarse el formulario de informacion, 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).

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.
Respuesta Responder a este mensaje
#4 Desastres
14/03/2006 - 00:36 | Informe spam
Hola Héctor. Gracias.


esa 'sencilla' palabra que utilizaste... -> 'casi'
pudiera 'hacer' que 'la única 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



showmodal=true

2) es [realmente] 'necesario' informar al usuario por medio -> de otro formulario ?



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)

al 'regresar' al formulario principal, el control 'activo' NO pierde el foco, pero su


re/activación no es tan 'sencilla'
:-(



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?)



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




Por cierto, esto a mi no me funciona. Pierde la capacidad de re activacion.

4) pudiera haber otros 'factores' involucrados... [pero no conozco el codigo ni los procedimientos


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).


comentas algun detalle mas... 'significativo' ?



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


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

showmodal=true



=> 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]

... un Msgbox esta bien para un si, un NO, un Cierra el libro y poco mas.
Es poco legible y menos afable. Creo que el limite son 256 caracteres y yo hablo (solo conmigo mismo) hasta por los codos.



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

Hay algo que lo complica quizas un poco mas. Teoricamente no deberia salir del Control. pero sale.
Y sin aparentemente ejecutarse el Exit del control. (o es que no esta dentro?)



=> [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.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida