Frage

Ich bin eine einzige Zeile Code ausführen, der innerhalb des Designers ausführen fehlschlägt, so dass all meine Kontrolle der öffentlichen Eigenschaft nicht mehr im Designer angezeigt. Aus diesem Grunde kann ich nicht mehr sehen, jede meiner Formen, die diese Kontrolle in der Visual Studios Design-Ansicht verwenden.

Die Codezeile in Frage stellt ein unsicheres Code-Projekt, das ein wenig Bildverarbeitung macht; Kommentierung macht es aus der Design-Ansicht wieder zum Leben erweckt. Allerdings führt der Code perfekt, also kann ich nicht sehen, warum der Code im Designer fehlschlägt. Dies ist der Code, der aufgerufen wird:

        /// <summary>
        /// Performs a color adjustment on the source bitmap. 
        /// </summary>
        /// <param name="source">The bitmap to be processed. This is changed by the
        /// process action.</param>
        /// <param name="redChange">change to the red value. Can be negative.</param>
        /// <param name="greenChange">change to the green value. Can be negative.</param>
        /// <param name="blueChange">change to the blue value. Can be negative.</param>
        /// <returns></returns>
        public static Bitmap ProcessColor(Bitmap source, int redChange, int greenChange, int blueChange)
        {
            sourceBitmap = source;

            // lock the source bitmap
            sourceBitmapData = getBitmapData(sourceBitmap, ref sourceWidth);
            sourcepBase = (Byte*)sourceBitmapData.Scan0.ToPointer();

            PixelData* pPixel;

            for (int y = 0; y < source.Height; y++)
            {
                pPixel = (PixelData*)(sourcepBase + y * sourceWidth);
                for (int x = 0; x < source.Width; x++)
                {
                    int redVal = pPixel->red + redChange;
                    if ( redVal <0 ) redVal = 0;
                    if ( redVal > 255) redVal = 255;
                    pPixel->red = (byte)redVal;

                    int greenVal = pPixel->green + greenChange;
                    if ( greenVal <0 ) greenVal = 0;
                    if ( greenVal > 255) greenVal = 255;
                    pPixel->green = (byte)greenVal;

                    int blueVal = pPixel->blue + blueChange;
                    if (blueVal < 0) blueVal = 0;
                    if (blueVal > 255) blueVal = 255;
                    pPixel->blue = (byte)blueVal;

                    pPixel++;
                }
            }

            sourceBitmap.UnlockBits(sourceBitmapData);
            sourceBitmapData = null;
            sourcepBase = null;

            return source;
        }

(Mit freundlicher Genehmigung der OpenNETCF Gemeinschaft)

Ihr Projekt ist nicht als unsicher markiert, aber das Projekt, das der oben genannte Code in ist als unsicher markiert. Sind beide Projekte müssen gekennzeichnet werden unsicher?

Oder ist es eine Möglichkeit, dass die Codezeile Brennen im Designer blockieren kann (ich eigentlich nicht brauchen, um die Ausgabe dieses Codes während in der Entwurfsansicht, wie es gerade ist eine deaktivierte Version eines Bild von einem bereitgestellten Bilderzeugungs ).

EDIT: Sperren Sie den Code aus laufenden beheben das Problem nicht. Nur Kommentierung aus der Linie ermöglicht die Entwurfsansicht zu arbeiten. die Linie in Having (selbst wenn sie in einer if [falsch == true] Anweisung Put) bewirkt, daß der Designer Fehler anzuzeigen, statt das Formular ein.

War es hilfreich?

Lösung

Wickeln Sie den Teil des Codes in if:

if(!DesignMode)
{
    // Your "unsafe" code goes here
}

Wenn Sie Compact Framework verwenden, verwenden diese:

if(Site != null && !Site.DesignMode)
{
    // Your "unsafe" code goes here
}

Siehe diesen Beitrag auf Modus Informationen über was für ein Tier DesignMode tatsächlich ist.

Andere Tipps

Ich habe das nicht schaffen, aber dachte, ich fand einen nützlichen Trick hinzufügen würde -> hier <- .

Fügen Sie einfach diese zu Ihrer Kontrolle und nutzen sie entsprechend.

public static bool IsDesignMode
{
  get 
  { 
    return AppDomain.CurrentDomain.FriendlyName.Contains("DefaultDomain"); 
  }
}

oder für uns VB.NET Leute:

  Public Shared ReadOnly Property IsDesignMode() As Boolean
    Get
      Return AppDomain.CurrentDomain.FriendlyName.Contains("DefaultDomain")
    End Get
  End Property
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top