2010-11-09 14 views
16

Me temo que hay algo obvio en mi código, pero me he encontrado con una situación en la que el evento Form.Load no se activa cuando creo y muestro mi formulario.Evento Form.Load no se activa, formulario que muestra

El formulario no está subclasificado (como he visto algunos problemas con eso en algunas búsquedas), y no me arrojarán ningún error cuando paso por el código en el depurador.

Tengo un punto de interrupción establecido en la función de carga de formulario creada por IDE (que tiene el sufijo de firma Handles MyBase.Load) pero nunca se alcanza el punto de interrupción y el formulario se visualiza y funciona.

El formulario se pasa tres argumentos en el constructor pero se llama a la función IntializeComponent() antes de que se haga cualquier otra cosa.

Código:

Public Sub New(ByVal argA As Object, ByVal argB As Object, ByVal mode As FormMode) 

    ' This call is required by the Windows Form Designer. 
    InitializeComponent() 

    ' Other code here, 
    ' No errors generated 
    ' 

End Sub 

La función de carga del formulario es el siguiente, (pero esto nunca se ejecuta realmente como el evento no se dispara).

Código:

Private Sub frmInstrumentEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    If Not argA Is Nothing Then ' argA set in constructor 
      ' Operations using argA 
    End If 
End Sub 

debo añadir que estoy usando alguna de enlace de datos con algunos controles y el objeto argA, pero si esto se produce un error que pensé que habría visto este (I ha definido la configuración CLR Execpetions a Thown en la ventana depurador> excepciones)

¿Alguna idea de por qué esto podría estar ocurriendo?

Respuesta

26

Acabo de tener un problema similar (fue en el evento Shown, no en Load, pero la causa principal es la misma). La razón estaba escondida en uno de los antepasados: había un NullReferenceException no administrado lanzado y esta excepción era de alguna manera "silenciada".

Lo encontré después de una depuración exhaustiva con F11.

... Pero al escribir esta respuesta yo encontramos este post on SO

Sólo añadir Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) en su método Main().

Si está utilizando una máquina de 64 bits, le proporciona la solución (funcionó en mi caso también).

+0

Si no puede obtener una excepción, puede deberse a este problema http://stackoverflow.com/questions/4933958/vs2010-does-not-show-unhandled-exception-message-in-a-winforms-application -on-a, en cuyo caso la solución rápida es ejecutar SIN depurar y ver qué pasa. – AndyClaw

+1

Me he encontrado con esta situación dos veces con la misma causa. Mi objeto tiene una propiedad DateTime configurada en DateTime.MinValue cuando enlace esa propiedad a DateTimePicker, falla silenciosamente y no ejecuta el controlador de eventos Form Load. La solución para mí fue establecer el valor predeterminado de la propiedad en DateTimePicker.MinimumDateTime. La diferencia entre los valores es DateTime.MinValue = 01/01/0001 y DateTimePicker.MinimumDateTime = 1/1/1753 – James

+0

Esto me salvó el día.Gracias – zidane

1

El problema que está experimentando puede deberse a que la aplicación debe cargar completamente el formulario antes de poder usar el "otro código". Esto podría deberse a que el otro código trata con objetos en el formulario que no han terminado de cargarse. Puede usar un temporizador que se habilita en la función de carga para ejecutar el otro código. De esta forma, no tiene problemas de temporización y puede cargar primero el formulario, y luego, una fracción de segundo más tarde, ejecutar el código que desee del temporizador.

+0

esto parece ser lo más parecido que puedo imaginar que está sucediendo ... de hecho si llamo a form.show, seguido de formulario .hide y luego form.show nuevamente el evento Load se está disparando ... encuentro este comportamiento extremadamente extraño y me gustaría llegar al origen del problema. – ChrisAU

1

Aquí hay otra idea.

¿Qué ocurre si establece todos los tipos de excepción (no solo para CLR) en lugar de dejarlos sin usuario? ¿La aplicación se rompe en algún lugar?

Además, solo para comprobarlo, se encuentra en modo de depuración, ¿verdad?

0

Matt probablemente tenga razón acerca de esto. ¿Ha intentado ajustar el código de la siguiente manera:

Private Sub frmInstrumentEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
If Not argA Is Nothing Then ' argA set in constructor 
     ' Operations using argA 
Else 
     MessageBox.Show("argA has not been set") 
End If 
End Sub 

Si el cuadro de mensaje aparece que significa que el evento se dispara antes de que se inicializa su argumento. También explicaría el comportamiento "extraño" relacionado con el cierre/apertura del formulario.

¿Ha intentado ejecutar las operaciones de argA en el evento 'Mostrado'?

1

¿Su formulario de Windows hereda de una página base? Si es así, la página base probablemente también tenga un controlador de evento de carga de formulario. En esa página base del manejador de eventos de Form Load probablemente encontrará una excepción que se está lanzando. Por lo tanto, está saliendo del controlador de eventos de carga de formulario de página base y no activa el controlador de eventos de carga de formulario en su formulario de Windows heredado.

0

No estoy seguro si esto ayudará, pero acabo de encontrarme con este problema porque alguien borró por error el Handles Me.Load. Veo que muestra MyBase.Load intente cambiarlo a Me.Load.

1

Tuve un problema similar, el problema fue un error en el enlace de datos. Omita el código de enlace de datos y pruébelo. Creo que el controlador de eventos de carga será golpeado. Luego vea qué pasa con la parte de enlace de datos.

4

OK Tuve el MISMO problema (creo) y las pistas aquí ayudaron. Era databinding (tipo de)

Tenía propiedades de algunos controles vinculadas a la configuración y cuando elimino estas configuraciones, el evento de carga de formularios dejó de ejecutarse. Se eliminaron los enlaces y ahora se está ejecutando nuevamente.

+0

Esto me pasó a mí en Visual Studio 2015. En mi caso, cambié el nombre de la configuración de la aplicación a la que estaba sujeto el control, y aunque el diseñador indicó que había refactorizado el enlace correctamente, mi evento de carga no fue t disparando Al cambiar el enlace a una configuración aleatoria de otra aplicación y luego a volver, lo solucioné por mí. –

0

Tuve un problema similar. Resultó que no estaba usando el método Show en el formulario, sino que usé una llamada showWindow de user32.dll. Esto significa que la forma aún apareció, pero el evento Load nunca se activó porque nunca se llamó al método dotNet Show.

7

Tuve un problema similar. Al abrir el formulario por primera vez, el evento de carga no se activaría, pero al abrirlo por segunda vez, todo estaría bien. El problema quedó como uno de mis cuadros de texto que estaba vinculado a un campo que había eliminado de la base de datos (servidor sql - Estaba usando conjuntos de datos, adaptadores de tablas y bindingsources de una manera bastante estándar).

Asegúrese de que todos los controles en su formulario que tienen datos tienen campos que existen en el conjunto de datos y que el conjunto de datos es un reflejo exacto de la tabla de base de datos subyacente (lo más fácil era hacer esto último) Configure el origen de datos con el botón wizzard "en la ventana de orígenes de datos (menú -datos - muestre las fuentes de datos) y elimine la tabla. Luego, vuelva a usarla para agregar la tabla. Esto debe asegurarse de que todos los datos coincidan

Hope esto ayuda.

1

Tenía el mismo problema. Comprueba mis enlaces de datos, todo parecía estar bien. Tengo que pensar, aunque el formulario estaba cerrado, tal vez .NET no estaba seguro (los viejos tiempos, a veces formas que re solo escondido y no realmente cerrado).

he añadido el controlador de eventos FormClosed y poner una sola línea en él:

Private Sub frmScheduleInquiry_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    Me.Dispose() 
End Sub 

Problema resuelto!

1

Resuelto ....

han pasado 4 horas y finalmente consiguió pistas de este respuestas. en mi caso tenía un par de control TextBox en el formulario vinculado a un BindingSource con la columna respectiva, todavía tengo ese bindingsource en el formulario pero lo que sucedió es que eliminé una columna de la tabla de base de datos subyacente, así que en el formulario todavía hay un TextBox existe apuntando a esa columna con bindingsource, de hecho no hay una columna como esa porque eliminé! ..... este evento Form.load principal no estaba disparando ........ finalmente corregido ..

gracias a todos ustedes ..

0

Sé que esta es una publicación anterior, pero pensé que si alguien estaba buscando este problema, que mi solución a este problema podría ayudar.

Estaba teniendo el mismo problema que el mencionado en la pregunta publicada originalmente, pero no tenía campos enlazados a datos en el formulario. Encontré que el problema estaba en el hecho de que estaba usando el método CurrentDeployment.CurrentVersion y estaba causando el problema silencioso. Establecí la aplicación del modo de depuración para liberar y el problema aún existía. A través del método de prueba y error, comenté el método de definición Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion y listo ... ahora funciona como siempre.

Terminé cambiando el código original del código a continuación.

Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion 
    sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision) 

nuevo código

#If (DEBUG) Then 
    sysVersion = "[Debug mode]" 
#Else 
    Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion 
    sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision) 
#End If 

espero que esto ayude a alguien. Happy Coding ...

1

Tuve exactamente el mismo problema que me acaba de ocurrir. Resultó que había agregado algunas propiedades de ApplicationsSettings a un control de TextBox, pero luego quise eliminarlas. I pensamiento Había aclarado todo, pero obviamente no lo hice, y esto fue lo que causó que el Form_Load() (y tal vez otros eventos también) no se dispare. Eliminar y luego volver a agregar el cuadro de texto ofensivo hizo el truco.

Esperanza esto ayuda

+0

SÍ. Gracias. Después de eliminar una configuración, busqué 'My.MySettings' en toda la solución para eliminarla de varios archivos del diseñador. Ahora dispara esos preciosos eventos de carga. –

0

mismo problema, Reescribí el diseñador y que arreglé. El diseñador se estaba cargando y se bloqueaba (silenciosamente por supuesto), y form_load no estaba disparando debido a eso.

0

Tenía el mismo problema, pero la causa era totalmente diferente. El formulario se mostraba utilizando form.Show() en lugar de form.ShowDialog()

Cuestiones relacionadas