![]() |
| |||
| Que tal amigos. Al momento de cerrar un Formulario con el Método Dispose(True) se muestra un pequeño parpadeo de otro form, o si tengo abierto una pestaña del Explorador de Windows también se muestra, pero es un efecto muy rápido, pero muy molesto, hay alguna forma de evitarlo? Saludos() |
| | ||||
| ||||
| |
| |||
| Hola, no será un tema de la tarjeta de video? posiblemente uses una onboard o vieja, me parece que puede venir por este lado. Saludos -- AUS Federico A. Colli On 7 ago, 21:43, Manolo Zepeda <ManoloZep...***discussions.microsoft.com> wrote: > Que tal amigos. > > Al momento de cerrar un Formulario con el Método Dispose(True) se muestra un > pequeño parpadeo de otro form, o si tengo abierto una pestaña del Explorador > de Windows también se muestra, pero es un efecto muy rápido, pero muy > molesto, hay alguna forma de evitarlo? > > Saludos() |
| |||
| "Manolo Zepeda" escribió: > > Al momento de cerrar un Formulario con el Método Dispose(True) se muestra > un > pequeño parpadeo de otro form, o si tengo abierto una pestaña del > Explorador > de Windows también se muestra, pero es un efecto muy rápido, pero muy > molesto, hay alguna forma de evitarlo? Realmente ignoro el motivo para que se muestra el parpadeo que nos comentas cuando llamas al método «Dispose». Yo, desde luego no lo puedo reproducir. ¿Estás ejecutando algún código en el evento «Dispose» del formulario? ¿El formulario lo muestras con el método «Show» (no modal) o con el método «ShowDialog» (formulario modal)? -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |||
| Que tal Enrique. Gracias por la atención. Se me olvidava comentarles que tengo un form MDI(Formulario Principal que es donde mando llamar al form Venta_Caja) Private Sub F_Venta_Caja_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles F_Venta_Caja.Click Venta_Caja.ShowInTaskbar = False Venta_Caja.ShowDialog(Me) End Sub Y el código que utilizo para cerrar es el sig: Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean If keyData = Keys.Escape Then Me.Close() end if End Sub Private Sub Venta_Caja_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed GC.Collect() GC.SuppressFinalize(Me) Me.Dispose(True) End Sub Yo tampoco entiendo porque es ese efecto, si abro directamente los Form sin depender del MDI no pasa nada,pero el efecto se ve cuando los abro del MDI. Saludos y Gracias |
| |||
| > Al momento de cerrar un Formulario con el Método Dispose(True) se muestra > un pequeño parpadeo de otro form, o si tengo abierto una pestaña del > Explorador de Windows también se muestra... Leyendo de nuevo tu primer mensaje, observo que dices que se muestra un pequeño parpadeo si tienes abierta una pestaña del Explorador de Windows. He tratado de hacer lo mismo, y he abierto el Explorador de Windows, y efectivamente se produce un ligero parpadeo cuando una vez que se encuentra en ejecución la aplicación, le paso el foco al Explorador de Windows y devuelvo de nuevo el foco a la aplicación. Cuando abro y cierro el formulario modal es cuando se produce el parpadeo en la ventana del Explorador de Windows. Por supuesto, para que se produzca esta situación, tanto la aplicación como la ventana del Explorador de Windows no deben de estar maximizadas. La verdad es que no sabría explicarte el motivo de ese comportamiento, que he comprobado que solamente se produce cuando desde el formulario modal se llama a su método «Dispose». Pero también he comprobado que tal comportamiento se produce cuando llamas al formulario «Venta_Caja» utilizando la instancia por defecto de éste. Si en lugar de utilizar la instancia por defecto del formulario, creo e instancio una variable tipo «Form» que apunte al formulario que deseo mostrar, no se produce ese ligero parpadeo del que estamos hablando. Desde el formulario principal, llama al formulario «Venta_Caja» de la siguiente manera, que a mi entender, es la manera correcta de llamar a cualquier formulario, sea éste un formulario modal o no modal: Private Sub F_Venta_Caja_Click( ... ) ' Declaramos una variable que referencia al formulario ' Dim frm As New Venta_Caja frm.ShowInTaskbar = False frm.ShowDialog(Me) ' Una vez cerrado el formulario es cuando lo ' destruimos. ' frm.Dispose End Sub Si muestro el formulario de ésta manera, ya no observo ningún parpadeo en la ventana del Explorador de Windows. Como estamos hablando de mostrar un formulario «modal», cuando se cierre el formulario Venta_Caja el código regresada al formulario principal y se llamará al método «Dispose» del formulario que se acaba de cerrar, por lo que deberás de eliminar todo el código que se ejecuta en el evento «FormClosed» del formulario Venta_Caja. En cuanto a llamar al método «Collect» del objeto GC, no encuentro un motivo aparente para que efectúes una recolección de elementos no utilizados, porque de ésto se encargará el runtime de .NET cuando él lo crea oportuno. Ahora bien, si tienes un buen motivo que justifique dicha llamada, entonces me parece muy bien que llames al "basurero". :-) Si lo crees oportuno, te aconsejaría que le echaras un vistazo al siguiente artículo: Abrir y cerrar formularios con Visual Basic .net http://mvp-access.es/softjaen/vbnet/...vbnetfor02.htm Ahí explico los entresijos existentes cuando se abre y se cierre un objeto Form. -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |||
| Que tal Enrique. Agradecido de antemano por tu valiosa colaboración en mi mensaje. Acabo de leer tu artÃ***culo publicado y me parece excelente, acabo de hacer lo que me indicas de hacer una instancia de un Formulario para poder abrirse desde el principal. Tengo los sig. formularios: 1- Menu_Principal 2. Venta_Caja 3. Busqueda_Prod En la primer instancia de abrir el primer formulario de Venta_Caja no tengo ningún problema(AsÃ*** como lo indicaste)ya que lo abro directamente de Menu_Principal, después de abrir el form Venta_Caja tengo que hacer una instancia a otro form(Busqueda_Prod) que es donde se búsca el artÃ***culo y muestro los datos en un DataGridView de Venta_Caja. En el form Busqueda_Prod tengo que hacer referencia a varios forms al momento de seleccionar los datos y checar cual es el que esta visible, y es ahi donde no se como hacer para hacer referencia al form Venta_Caja, ya que es una instancia solamente y al momento de ejecutar el código me dice que no esta visible. If Venta_Caja.Visible then ElseIF Productos.Visible then End IF Que puedo hacer en este caso? Saludos |
| |||
| "Manolo Zepeda" escribió: > Tengo los sig. formularios: > 1- Menu_Principal > 2. Venta_Caja > 3. Busqueda_Prod > > En la primer instancia de abrir el primer formulario de Venta_Caja no > tengo > ningún problema(Así como lo indicaste)ya que lo abro directamente de > Menu_Principal, después de abrir el form Venta_Caja tengo que hacer una > instancia a otro form(Busqueda_Prod) que es donde se búsca el artículo y > muestro los datos en un DataGridView de Venta_Caja. > > En el form Busqueda_Prod tengo que hacer referencia a varios forms al > momento de seleccionar los datos y checar cual es el que esta visible, y > es > ahi donde no se como hacer para hacer referencia al form Venta_Caja, ya > que > es una instancia solamente y al momento de ejecutar el código me dice que > no > esta visible. Si estás utilizando Visual Basic 2005 ó 2008, puedes utilizar la propiedad «OpenForms» del objeto «MyApplication» para saber si un formulario concreto se encuentra abierto actualmente. Por ejemplo, en el formulario de búsqueda podrías tener la siguiente función que te devolverá la referencia del formulario que le pases en el argumento: Private Function ReferenciarForm(ByVal formName As String) As Form For Each frm As Form In My.Application.OpenForms If frm.Name.ToLower = formName.ToLower Then Return frm End If Next ' El formulario no se encuentra abierto Return Nothing End Function Simplemente llamarías a la función pasándole el nombre del formulario que deseas referenciar: Dim frm As Form = ReferenciarForm("Form223") If frm IsNot Nothing Then ' Seleccionamos el formulario frm.Select() End If Te comento que si el formulario «Busqueda_Prod» es un formulario «modal», el formulario 223 quedará seleccionado si se encuentra abierto (lo podrás observas porque el foco pasa a dicho formulario), pero realmente no podrás hacer nada con él hasta que no cierres todos los formularios modales que tengas abiertos. Pero si todos los formularios son «no modales», entonces no hay ningún problema para que una vez seleccionado el formulario puedas hacer clic en cualqier botón que se encuentra incluido en el mismo, por ejemplo. :-) -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |