Подтвердить что ты не робот

Событие Form.Load не запускается, форма показывается

Я боюсь, что есть что-то явно не так с моим кодом, но я сталкивался с ситуацией, когда Form.Load событие не стрельбы, когда я создаю и показать свою форму.

Форма не подклассы (как я видел некоторые проблемы с этим в некоторых поисках), и я не получаю какую-либо ошибка генерируется, когда я ступаю через код в отладчике.

У меня есть точка останова на созданной IDE функции загрузки формы (у которой есть суффикс подписи Handles MyBase.Load), но точка останова никогда не достигается, и форма отображается и работает.

Форма передается три аргумента в конструкторе, но функция IntializeComponent() вызывается до того, как что-то еще сделано.

код:

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

Функция загрузки формы следующая: (но это никогда не выполняется, поскольку событие не запускается).

код:

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

Я могу добавить, что я использую некоторую привязку данных к некоторым элементам управления и объекту argA, но если это вызывает ошибку, я думал, что видел бы это (у меня есть настройки CLR Execpetions, установленные в окне "Отказывание в отладчике" > исключения )

Любые идеи, почему это может произойти?

4b9b3361

Ответ 1

У меня была аналогичная проблема (это было в событии Shown, а не Load, но основная причина такая же). Причина была скрыта глубоко в одном из предков - был необработанный NullReferenceException брошен, и это исключение было каким-то образом "отключено".

Я нашел его после обширной отладки с F11.

Но... при написании этого ответа я нашел этот пост в SO

Просто добавьте Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) в свой метод Main().

Если вы используете 64-битную машину, она предоставляет вам решение (оно также работало в моем случае).

Ответ 2

У меня была аналогичная проблема. При первом открытии формы событие загрузки не было бы запущено, но при открытии его во второй раз все было бы хорошо. Проблема была настроена как одно из моих текстовых полей, которое было привязано к полю, которое я удалил из базы данных (SQL-сервер - я использовал стандартные типы данных, таблицы и адаптеры).

Убедитесь, что все элементы управления в форме, которые привязаны к базе данных, имеют поля, которые существуют в наборе данных, и что набор данных является точным отражением базовой таблицы базы данных (самым простым было сделать этот последний бит - использовать "Настроить источник данных с помощью wizzard" в окне источников данных (menu -data - показать источники данных) и удалить таблицу. Затем используйте его снова, чтобы добавить таблицу обратно - это должно убедиться, что все данные совпадают.

Надеюсь, что это поможет.

Ответ 3

ОК У меня была ТАМАЯ проблема (я думаю), и подсказки здесь помогли. Это была привязка данных (вроде)

У меня были свойства некоторых элементов управления, связанных с настройками, и когда я удаляю эти параметры, событие загрузки формы остановилось. Удалены привязки, и теперь он снова запущен.

Ответ 4

Проблема, с которой вы столкнулись, может быть вызвана тем, что приложение должно полностью загрузить форму, прежде чем вы сможете выполнить "другой код". Это может быть связано с другим кодом, связанным с объектами в форме, которая еще не закончила загрузку. Вы можете использовать таймер, который активируется в функции загрузки для выполнения другого кода. Таким образом, у вас нет каких-либо проблем с синхронизацией, и вы можете сначала загрузить форму, а затем через вторую секунду запустить код, который вы хотите от таймера.

Ответ 5

Вот еще одна идея.

Что произойдет, если вы установите все типы исключений (не только для CLR), которые будут выбрасываться вместо пользовательского необработанного. Разве приложение вообще ломается?

Кроме того, для двойной проверки вы находитесь в режиме отладки правильно?

Ответ 6

Является ли ваша форма окна наследуемой от базовой страницы? Если это так, базовая страница, вероятно, также имеет обработчик события Form Load. В этом базовом обработчике событий загрузки формы вы, вероятно, найдете исключение, которое бросается. Таким образом, он выходит из обработчика события загрузки формы на главной странице и не запускает обработчик события загрузки формы в вашей унаследованной форме окна.

Ответ 7

У меня была аналогичная проблема, проблема была ошибкой в ​​привязке данных. Опустите код для привязки данных и попробуйте. Я думаю, что обработчик события загрузки будет удален. Затем посмотрите, что не так с частью привязки данных.

Ответ 8

Была та же проблема. Проверял мои привязки данных, все выглядело нормально. Подумал, хотя форма была закрыта, возможно,.NET не был уверен (старые времена, иногда формы были только скрыты и не были действительно закрыты).

Я добавил обработчик события FormClosed и поместил в него одну строку:

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

Проблема решена!

Ответ 9

решаемая....

Провели 4 часа и, наконец, получили подсказки из этих ответов. в моем случае у меня была пара элементов управления TextBox в форме, привязанной к BindingSource с соответствующим столбцом, у меня все еще есть этот связующий источник в форме, но произошло то, что я удалил один столбец из базовой таблицы базы данных, так что в форме есть еще один TextBox существует, указывая на этот столбец с bindingsource, на самом деле нет такого столбца, потому что я удалил!..... это событие Form.load не срабатывало........ наконец исправлено..

спасибо всем вам..

Ответ 10

У меня была такая же проблема, как раз со мной. Оказывается, я добавил некоторые свойства ApplicationSettings в элемент управления TextBox, но позже захотел удалить их. Я думал, что все это прояснил, но, очевидно, я этого не сделал - и это вызвало появление Form_Load() (и, возможно, других событий), чтобы не срабатывать. Удаление и повторное добавление оскорбительного TextBox сделали трюк.

Надеюсь, что это поможет

Ответ 11

Мэтт, вероятно, прав в этом вопросе. Вы пробовали настроить свой код следующим образом:
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

Если появляется сообщение, это означает, что событие запускается до инициализации вашего аргумента. Это также объясняет "странное" поведение в отношении закрытия/открытия формы.

Вы пытались запустить операции argA в событии "Показывать"?

Ответ 12

Не уверен, что это поможет, но я просто столкнулся с этой проблемой, потому что кто-то по ошибке удалил Handles Me.Load. Я вижу, что вы показываете MyBase.Load, попробуйте изменить его на Me.Load.

Ответ 13

У меня была аналогичная проблема. Оказалось, что я не использовал метод Show в форме - вместо этого с помощью вызова user32.dll ShowWindow. Это означает, что форма все еще появилась, но событие Load никогда не запускалось, потому что метод dotNet Show никогда не вызывался.

Ответ 14

Я знаю, что это старый пост, но я подумал, что если кто-то ищет эту проблему, это может помочь мне решить эту проблему.

У меня была та же проблема, что и в первоначально заданном вопросе, но у меня не было полей данных, связанных с формой. Я обнаружил, что проблема заключалась в том, что я использовал метод CurrentDeployment.CurrentVersion, и это вызывало проблему молчания. Я установил приложение из режима отладки для освобождения, и проблема все еще существовала. Через проб и ошибок я заметил метод определения Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion  и престо... теперь он работает как обычно.

В итоге я изменил исходный код на код ниже.

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

Новый код

#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

Надеюсь, это поможет кому-то. Счастливое кодирование...

Ответ 15

Такая же проблема, я переписал дизайнера и исправил его. Дизайнер загружался, затем рушился (тихо, конечно), и form_load не стрелял из-за этого.

Ответ 16

Была та же проблема, но причина была совершенно иной. Форма показывалась с использованием form.Show() вместо формы .ShowDialog()