VS 2008 дизайнер и пользовательский контроль - PullRequest
0 голосов
/ 13 апреля 2010

Я создал пользовательский элемент управления сеткой данных. Я перетащил его в окно формы и установил его свойства, такие как столбец и все и запустил проект. Он успешно построен, и я могу просмотреть элемент управления сеткой в ​​форме.

Теперь, если я пытаюсь просмотреть эту форму в конструкторе, я получаю следующую ошибку ...

Object reference not set to an instance of an object.     




Instances of this error (1)  

1.   Hide Call Stack 

at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.GetMemberTargetObject(XmlElementData xmlElementData, String& member)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.CreateAssignStatement(XmlElementData xmlElement)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.XmlElementData.get_CodeDomElement()
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.EndElement(String prefix, String name, String urn)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.Parse(XmlReader reader)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.XML.CodeDomXmlProcessor.ParseXml(String xmlStream, CodeStatementCollection statementCollection, String fileName, String methodName)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender, EventArgs e)
at System.CodeDom.CodeMemberMethod.get_Statements()
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload) 

Если я игнорирую исключение, форма будет пустой, без признаков контроля сетки. Однако я вижу код сетки в файле конструктора.

Любой указатель на это будет очень полезен.

Я настроил сетку для своих требований, как будто добавил текстовое поле n все. Я определил 3 конструктора

public GridControl() 
public GridControl(IContainer container) 
protected GridControl(SerializationInfo info, StreamingContext context)

Ответы [ 4 ]

0 голосов
/ 09 января 2013

Я столкнулся с той же ошибкой, чтобы проверить, наследует ли ваш класс Windows Form класс System.Windows.Forms.Form, как в Form1:Form Надеюсь, что dis помогает !!!!

0 голосов
/ 13 апреля 2010

Похоже, что дизайнер форм пытается инициализировать элемент управления. Однако свойство, которое он пытается инициализировать, возможно, было удалено из UserControl. Есть много способов решить эту проблему. Я рекомендую вам отладить элемент управления во время разработки. Это самый верный способ найти проблему. Проверьте "Поиск MSDN" для "отладки контроля времени разработки" в http://social.msdn.microsoft.com/Search/en-US?query=design-time+control+debugging&ac=8

0 голосов
/ 12 мая 2010

У меня есть эта проблема все время ... это отстой.

[Бродить (по)]

Вот то, что я думаю, я знаю:

  1. При проектировании разместите элемент управления на форме. Создавайте и обновляйте часто ... это позволит вам узнать, какие изменения вызвали у дизайнера недовольство.
  2. Закройте визуальную студию полностью заново ... Я не могу сказать вам, сколько раз я преследовал ошибку дизайнера, когда дизайнер "застрял".
  3. Очень важно, чтобы вы поняли: дизайнер действительно, действительно глуп, как глупый мешок с камнями.
  4. Любые открытые поля или свойства пользовательских типов объектов почти всегда вызывают путаницу в конструкторе *. Я считаю, что следующие атрибуты помогут решить большинство из этих проблем:

    [Browsable (ложь)]

    [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]

  5. Открытые поля или свойства без конструктора по умолчанию всегда будут вызывать путаницу в конструкторе. Когда вы удаляете пользовательский элемент управления в форме, дизайнер эффективно создает элемент управления .. поэтому любому общедоступному объекту необходим четкий путь создания. Я обнаружил, что самый простой способ обойти это (читай взломать) - сохранить нетривиальные пользовательские классы закрытыми и выставить открытые свойства как фасад.

- Я сказал, перезапустите Visual Studio, потому что иногда дизайнер "застревает" на ошибке, которой не существует? .. Я надеюсь, что сделал.

[Бродить (выключен)]

Надеюсь, это поможет ...

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

0 голосов
/ 13 апреля 2010

Похоже, что NullReferenceException выбрасывается в конструктор по умолчанию вашего элемента управления (тот без параметров). Очевидно, это исключение выдается только во время разработки, поскольку вы говорите, что оно работает во время выполнения. Вы выполняете какой-либо код инициализации в этом конструкторе, например, вызовы базы данных или тому подобное? Или вы используете какие-либо экземпляры, которые могут быть недоступны во время разработки?

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