Die IDE von Visual Studio 2008 gibt die benutzerdefinierten Steuerelemente nicht korrekt wieder

Ich habe zur Entwurfszeit ein Problem mit all meinen Formularen und benutzerdefinierten Steuerelementen in Visual Studios 2008. Bis zum vorherigen Einchecken wurden alle Steuerelemente wie erwartet gerendert. Der einzige Hauptunterschied zwischen der aktuellen Version und der vorherigen Arbeitsversion bestand darin, dass sich eine Eigenschaft auf dem Steuerelement befandUIText wurde umbenannt vonContent zuValue. Die anderen Änderungen sind das Hinzufügen eines neuen Formulars und von 3 neuen Aufzählungen, aber es gibt sicherlich keine offensichtliche Änderung, die sich auf alle Formulare im Programm auswirken würde (einschließlich der neuen).

Alle Steuerelemente (in jedem Formular) werden jetzt als Kästchen mit dem Namen des Steuerelements gerendert (sie werden jedoch zur Laufzeit alle korrekt gerendert):

Ich habe versucht, ein brandneues Formular in meinem Projekt zu erstellen, ein brandneues benutzerdefiniertes Steuerelement mit nur einer Beschriftung darauf zu erstellen, und ich habe immer noch genau das gleiche Problem:

Beachten Sie, dass Standard-.NET-Formularsteuerelemente problemlos funktionieren. Dies ist also nur ein Problem bei benutzerdefinierten Steuerelementen.

Wenn ich meine vorherige Version aus dem Repository wiederherstelle, wird alles wieder korrekt gerendert:

Ich könnte einfach auf diese funktionierende Version zurückgreifen und weitermachen, aber ich möchte lieber wissen, wie ich das Problem beheben kann, falls es erneut auftritt. Ich poste hier in der Hoffnung, dass es sich um ein Programmierproblem handelt, das einer Visual Studios 2008-Ausgabe angehört (übrigens auf SP1).

UPDATE - Problem zurückverfolgt, kann es nicht erklären

I Fest die Angelegenheit. Nun, behoben ist nicht wirklich das richtige Wort dafür. Ich habe das Problem gefunden, indem ich alle Benutzersteuerelemente 1 gleichzeitig entfernt habe, bis das Formular wieder ordnungsgemäß gerendert wurde. Das Problem lag in meinem Signatur-Steuerelement (das seit Ewigkeiten vorhanden ist, nur bei meinem letzten Einchecken hatte ich einen Verweis auf das Projekt hinzugefügtiVirtualDocket.CodeLibrary in das Hauptprojekt:

<code>  iVirtualDocket
    - References iVirtualDocket.UIControls
    - References iVirtualDocket.CodeLibrary
  iVirtualDocket.UIControls
    -References iVirtualDocket.CodeLibrary
</code>

Die Signatur hat eine Eigenschaft namensSignatureData, was dies tat:

<code>public byte[] SignatureData
{
    get
    {
        if (_signature == null)
        {
            return null;
        }
        else
        {
            return iVirtualDocket.CodeLibrary.Conversions.ImageToByteArray(
                _signature, ImageFormat.Png);
        }
    }
}
</code>

ImageToByteArray sieht folgendermaßen aus:

<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>

Wenn ich die obige Methode in dasUIControls Projekt, dann funktioniert alles gut. Sobald ich jedoch die Methode wieder in denCodeLibrary Projizieren Sie und rufen Sie es dort auf, alle meine Formulare beenden, UserControls wiederzugeben.

Folgendes behebt das Problem, aber ich möchte wirklich wissen, warum:

<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>

(Was noch bizarrer ist, dass ich diese Eigenschaft noch nicht einmal benutze.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage