Событие 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 ]

0 голосов
/ 20 ноября 2018

Убедитесь, что в окне «Конфигурация решения» в верхней части среды IDE отображается «Отладка».Я обнаружил, что если он показывает «Release», то метод «Load» не перехватывается отладчиком.

0 голосов
/ 26 октября 2018

Я столкнулся с этим симптомом при создании и запуске приложения .NET 4.0 WinForms, которое загружало ряд старых сборок (.NET 2.0; .NET 1.1).

В прошлом я видел эту причину исключения сборки смешанного режима. В этом конкретном случае основная форма загружается без исключения и без выполнения какого-либо кода загрузки формы.

В моем случае решением было установить useLegacyV2RuntimeActivationPolicy="true" в документе App.config.

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
0 голосов
/ 17 июля 2017

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

0 голосов
/ 13 сентября 2016

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

0 голосов
/ 08 января 2016

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

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

Я закончил тем, что изменил оригинальный код с кодом ниже.

    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

Надеюсь, это кому-нибудь поможетУдачного кодирования ...

0 голосов
/ 08 ноября 2012

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

0 голосов
/ 09 ноября 2010

Мэтт, вероятно, прав насчет этого. Вы пытались настроить свой код следующим образом:

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 в событии 'Shown'?

0 голосов
/ 21 июня 2011

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

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