Domanda

Sto eseguendo una riga di codice che non viene eseguita all'interno della finestra di progettazione, facendo sì che tutte le proprietà pubbliche del mio controllo non vengano più visualizzate nella finestra di progettazione. Per questo motivo non riesco più a visualizzare nessuno dei miei moduli che utilizzano tale controllo nella visualizzazione Progettazione di Visual Studios.

La riga di codice in questione chiama un progetto di codice non sicuro che esegue un po 'di elaborazione delle immagini; commentarlo fa rivivere la visione del design. Tuttavia, il codice viene eseguito perfettamente, quindi non riesco a capire perché il codice ha esito negativo nella finestra di progettazione. Questo è il codice che viene chiamato:

        /// <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;
        }

(Per gentile concessione della comunità OpenNETCF)

Il mio progetto non è contrassegnato come non sicuro, ma il progetto in cui si trova il codice sopra è contrassegnato come non sicuro. Entrambi i progetti devono essere contrassegnati come non sicuri?

Oppure, c'è un modo in cui posso bloccare quella riga di codice che si attiva nella finestra di progettazione (in realtà non ho bisogno dell'output di questo codice nella vista di progettazione in quanto sta semplicemente generando una versione disabilitata di un'immagine da un'immagine fornita ).

MODIFICA: il blocco dell'esecuzione del codice non risolve il problema. Solo commentando l'allineamento consente alla vista di progettazione di funzionare. La presenza della riga (anche se inserita in un'istruzione if [false == true]) consente al progettista di visualizzare errori, anziché il modulo.

È stato utile?

Soluzione

Avvolgi la parte di codice in if:

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

Se stai usando Compact Framework, usa questo:

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

Vedi questo post su informazioni sulla modalità su che bestia DesignMode è in realtà.

Altri suggerimenti

Non l'ho creato, ma ho pensato di aggiungere un trucco utile trovato - & Gt; qui & Lt; - .

Basta aggiungere questo al tuo controllo e usarlo in modo appropriato.

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

O per noi gente di VB.NET:

  Public Shared ReadOnly Property IsDesignMode() As Boolean
    Get
      Return AppDomain.CurrentDomain.FriendlyName.Contains("DefaultDomain")
    End Get
  End Property
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top