2011-01-20 3 views
1

Я новичок в C# WinForms. Я создал класс (EnhancedForm), который наследует класс Form. В EnhanceForm я поставил некоторые общие функции (например, проверки, общие используемые объекты, такие как DataTable и строковые переменные и т. Д., Так что мне может не понадобиться повторять код снова и снова в формах), которые я хочу использовать во всех формах, а затем все мои формы наследуют это (EnhancedForm).C# WinForms, что это за странная ошибка?

В DAL (отдельная библиотека классов) У меня есть класс CommonDB, который имеет общие функции, связанные с БД. Для связи с базой данных я делал объект CommonDB во всех формах. Я подумал о том, чтобы добавить CommonDB в EnhancedForm, чтобы мне не пришлось создавать его объекты во всех классах.

Вот что-то происходит, что я не мог понять. Приложение работает нормально. Но если я попытаюсь открыть форму в представлении дизайна, она даст ошибку. «Ссылка на объект не установлена ​​в экземпляр объекта». Я не мог просмотреть форму в режиме разработки. Если я удалю объект CommonDb из EnhancedForm и поместил его в отдельные формы, он отлично работает и позволяет просматривать формы.

Если я компилирую и запускаю эту ошибку, не появляется. Пожалуйста, помогите мне в этом.

Благодаря

ответ

4

У вас есть код в EnhancedForm, что предполагает объект CommonDb. Во время выполнения вы создаете это (возможно, в Form_Loaded), но Design-time его отсутствует.

Предпочтение будет весь ваш код доступа CommonDb должен проверить нуль, и/или this.DesignMode

+0

Я не знаю о последних версиях VS/.NET (мы все еще работаем в 2005 году), но свойство DesignMode, кстати, не работает вообще. Надеюсь, они это исправили. –

+0

Спасибо Хенку за руководство, но странно, что это происходит со всеми формами. Предположим, что я использовал объект CommonDB в форме1, но проектировал все формы, которые были у него. Во-вторых, в EnhancedForm я сделал funtion, чтобы закрыть форму, если пользователь нажал клавишу escape. Если я начну использовать Commondb, эта функция перестанет работать. Я не понимаю, где я ошибаюсь. – haansi

+0

Даже при загрузке формы я повторно создаю Commondb, но проблема остается. Перед тем, как позвонить, я даже положил, если не равен нулю, но результаты одинаковы. Plz совет. – haansi

1

Кажется, как будто вы инициируете свой класс CommonDB внутри конструктора вашей базовой формы. Visual Studio использует Reflection для отображения форм в представлении дизайна, что вызывает вызов конструктора формы. Вы можете попробовать просто перестроить проект, чтобы увидеть, видите ли вы формы в дизайне, но я не думаю, что это сработает.

Смежные вопросы