Ошибки среды разработки Visual Studio 2008 с помощью унаследованных пользовательских контролей
Имейте действительно раздражающее время, разрабатывая некоторый код для набора UserControls, которые используют довольно элементарное наследование. По сути, это три разных подробных представления, которые все наследуются от одного базового класса, который, в свою очередь, реализует единый интерфейс.
Интерфейс IBaseDetailView
Класс BaseDetailView: реализует IBaseDetailView
Класс DetailView1: наследует BaseDetailView Класс DetailView2: наследует BaseDetailView Класс DetailView3: наследует BaseDetailView
Затем у меня есть Composite UserControl, который добавляет отдельные DetailViews 1-3 на вкладке в TabControl.
Довольно простые вещи. Все отлично компилируется, все пользовательские элементы управления доступны на панели инструментов и могут быть перетащены в любую форму. Но есть одна проблема...
Они первоначально отображают, а что нет, но после компиляции ошибок формы с печально известной ошибкой "Экземпляр объекта не установлен на ссылку".
Теперь для получения дополнительной информации... Если я закомментирую события Form_Load в каждом конкретном / производном классе DetailView, эта ошибка исчезнет, и форму можно будет просмотреть в режиме разработки. У событий Form_Load есть вызовы ado.net к серверу sql, которые, кажется, вызывают ошибки.
В такт событиям Form_Load я не получаю никаких ошибок при компиляции и могу без проблем запускать приложения в режиме отладки или выпуска. Я просто не могу просматривать любые формы с помощью UserControls в DesignMode.
Я добавил If Me.DesignMode Then Return к событиям Form_Load, но это не сработало. Я думаю, что VS2008 на самом деле пытается запустить код в UserControls... Я гуглил это, но я не нашел решения. Любая помощь высоко ценится!
1 ответ
Поставьте нулевую проверку вокруг свойств / полей в методе Form_Load. У нас были похожие проблемы, так как кажется, что дизайнер использует FormLoad во время разработки, а не то, что вы ожидаете.
Существует также свойство DesignMode, которое вы можете использовать.
Надеюсь, это поможет.