Visual Studio 2008 IDE неправильно отображает пользовательские элементы управления

У меня возникла проблема во время разработки со всеми моими формами и пользовательскими элементами управления в Visual Studios 2008. До предыдущей регистрации все элементы управления отображались так, как ожидалось. Единственное основное отличие между текущей версией и предыдущей рабочей версией заключалось в том, что свойство на элементе управленияUIText был переименован изContent вValue, Другие изменения включают добавление новой формы и 3 новых перечисления, но, разумеется, нет очевидных изменений, которые затронули бы все формы в программе (включая новые).

Все элементы управления (в каждой форме) теперь отображаются в виде поля с именем элемента управления (однако все они отображаются правильно во время выполнения):

Rendering Issue

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

Bizarre

Обратите внимание, что стандартные элементы управления .Net работают нормально, так что это проблема только с пользовательскими элементами управления.

Если я восстановлю предыдущую версию из репозитория, то все снова начнет корректно рендериться:

Rendering Correctly

Я мог бы просто вернуться к этой рабочей версии и продолжить, но я бы скорее знал, как решить проблему, если она возникнет снова. Я публикую здесь, надеясь, что это проблема программирования, связанная с проблемой 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.)

Ответы на вопрос(2)

Ваш ответ на вопрос