#.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. Вам нужно изменить код в исходном проекте, или вы можете переделать свою форму вместо наследования исходного проекта.