Система.Windows.Формы.Событие Panel.VisibleChanged, возникающее при открытии конструктора (проект НЕ запущен)

#.net #vb.net #visual-studio #winforms #visual-studio-2019

#.net #vb.net #visual-studio #winforms #visual-studio-2019

Вопрос:

Моя система работает под управлением 64-разрядной версии Windows 10. Я использую Visual Studio 16.0.30320.27 D16.6.

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

Моя проблема в том, что когда я пытаюсь открыть любой файл конструктора форм Windows, он выдает ошибку, которая возникает в функции BodyPanel_VisibleChanged. Ошибка возникает из-за того, что проект фактически не запущен, и функция пытается захватить объект, который инициализируется только во время выполнения.

Итак, вот мои вопросы: почему запускается событие VisibleChanged, если проект даже не запущен? Есть ли у меня способ изменить это поведение? Отличалось ли это поведение в предыдущих версиях Visual Studio (этого не произошло в версии 2013)?

UPDATE1: я переопределил функцию, чтобы не вызывать базовую функцию в режиме разработки, но все равно получаю ту же ошибку после перестройки:

 Protected Overrides Sub BodyPanel_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles pnlCriteria_Item.VisibleChanged,
            pnlCriteria_Main.VisibleChanged,
            pnlCriteria.VisibleChanged,
            pnlPlannedWorkOrders.VisibleChanged

        If Not DesignMode Then
            MyBase.BodyPanel_VisibleChanged(sender, e)
        End If
    End Sub
  

UPDATE2: я также переопределил OnVisibleChanged, но ошибка все еще возникает.

 Protected Overrides Sub OnVisibleChanged(e As EventArgs)
        If Not DesignMode Then
            MyBase.OnVisibleChanged(e)
        End If

    End Sub
  

Комментарии:

1. Можете ли вы переопределить OnVisibleChanged и вызывать base.OnVisibleChanged(e) только тогда, когда DesignMode значение false равно? Кстати, доступ к объектам в этом обработчике событий без проверки на null не является хорошей вещью.

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

3. В ответ на другое ваше утверждение, код, в котором происходит сбой, был написан не мной, и у меня нет доступа для его изменения.

4. Из описания неясно, но для того, чтобы реализованное переопределение сработало, это должен быть код, который выполняется конструктором. Под этим я подразумеваю, что вам нужно будет добавить унаследованную форму, которая наследуется от измененной базовой формы. Таким образом, вы разрабатываете форму на основе измененного оригинала.

5. Вам нужно изменить код в исходном проекте, или вы можете переделать свою форму вместо наследования исходного проекта.