Событие Form.Load не запускается, показ формы - PullRequest
16 голосов
/ 09 ноября 2010

Боюсь, что с моим кодом что-то явно не так, но я столкнулся с ситуацией, когда событие 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 установлено значение Thown в окне отладчика> исключения ) * * тысяча двадцать-один

Есть идеи, почему это может происходить?

Ответы [ 18 ]

28 голосов
/ 01 февраля 2012

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

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

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

Просто добавьте Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) в свой Main() метод.Если вы используете 64-разрядную машину, она предоставляет вам решение (это работало и в моем случае).

7 голосов
/ 27 ноября 2012

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

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

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

4 голосов
/ 06 января 2012

ОК, у меня была ОДНА ЖЕ проблема (я думаю), и подсказки здесь помогли. Это была привязка данных (вроде)

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

1 голос
/ 17 мая 2011

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

1 голос
/ 30 декабря 2011

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

1 голос
/ 09 ноября 2010

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

1 голос
/ 25 января 2016

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

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

1 голос
/ 05 ноября 2015

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

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

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

1 голос
/ 31 мая 2013

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

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

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

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

1 голос
/ 09 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...