Visual Studio 2008 IDE неправильно отображает пользовательские элементы управления
У меня возникла проблема во время разработки со всеми моими формами и пользовательскими элементами управления в Visual Studios 2008. До предыдущей регистрации все элементы управления отображались так, как ожидалось. Единственное основное отличие между текущей версией и предыдущей рабочей версией заключалось в том, что свойство на элементе управленияUIText
был переименован изContent
вValue
, Другие изменения включают добавление новой формы и 3 новых перечисления, но, разумеется, нет очевидных изменений, которые затронули бы все формы в программе (включая новые).
Все элементы управления (в каждой форме) теперь отображаются в виде поля с именем элемента управления (однако все они отображаются правильно во время выполнения):
Я пытался создать совершенно новую форму в своем проекте, создать совершенно новый пользовательский элемент управления с надписью, и у меня все еще возникла та же проблема:
Обратите внимание, что стандартные элементы управления .Net работают нормально, так что это проблема только с пользовательскими элементами управления.
Если я восстановлю предыдущую версию из репозитория, то все снова начнет корректно рендериться:
Я мог бы просто вернуться к этой рабочей версии и продолжить, но я бы скорее знал, как решить проблему, если она возникнет снова. Я публикую здесь, надеясь, что это проблема программирования, связанная с проблемой Visual Studios 2008 (кстати, в SP1).
UPDATE - Issue traced, can't explain itяfixed проблема. Что ж, исправление не является действительно подходящим словом для этого. Я обнаружил проблему, удалив все пользовательские элементы управления по 1, пока форма снова не начала правильно отображаться. Проблема была в моем контроле подписи (который присутствовал целую вечность, только во время последней регистрации я добавил ссылку на проектiVirtualDocket.CodeLibrary
в основной проект:
<code> iVirtualDocket - References iVirtualDocket.UIControls - References iVirtualDocket.CodeLibrary iVirtualDocket.UIControls -References iVirtualDocket.CodeLibrary </code>
Подпись имеет свойство под названиемSignatureData
, который делал это:
<code>public byte[] SignatureData { get { if (_signature == null) { return null; } else { return iVirtualDocket.CodeLibrary.Conversions.ImageToByteArray( _signature, ImageFormat.Png); } } } </code>
ImageToByteArray выглядит следующим образом:
<code>public static byte[] ImageToByteArray(Image imageToConvert, ImageFormat formatOfImage) { byte[] ret; using (MemoryStream ms = new MemoryStream()) { imageToConvert.Save(ms, formatOfImage); ret = ms.ToArray(); } return ret; } </code>
Если я переместить вышеупомянутый метод вUIControls
проект, то все работает отлично. Однако, как только я верну метод обратно вCodeLibrary
проект и вызвать его там, все мои формы перестают отображать UserControls.
Выполнение следующих действий решает проблему, но я действительно хотел бы знать, почему:
<code>public byte[] SignatureData { get { if (_signature == null) { return null; } else { // Need to call this code directly here instead of through // the CodeLibrary conversions, otherwise all user controls stop // rendering in design mode byte[] ret; using (MemoryStream ms = new MemoryStream()) { _signature.Save(ms, ImageFormat.Png); ret = ms.ToArray(); } return ret; } } } </code>
(What's even more bizarre is that I don't even use this property yet.)