2

デザイナー内で実行できないコード行を実行しているため、コントロールのすべてのパブリック プロパティがデザイナーに表示されなくなります。このため、Visual Studio のデザイン ビューでそのコントロールを使用するフォームを表示できなくなりました。

問題のコード行は、画像処理を少し行うアンセーフ コード プロジェクトを呼び出します。コメントアウトすると、デザイン ビューが生き返ります。ただし、コードは完全に実行されるため、デザイナーでコードが失敗する理由がわかりません。これは呼び出されているコードです:

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

(OpenNETCF コミュニティの厚意による)

私のプロジェクトは安全でないとマークされていませんが、上記のコードが含まれているプロジェクトは安全でないとマークされています。両方のプロジェクトを安全でないとマークする必要がありますか?

または、デザイナーでそのコード行の実行をブロックする方法はありますか (提供された画像から無効なバージョンの画像を生成しているだけなので、デザインビューではこのコードの出力は実際には必要ありません)。

編集:コードの実行をブロックしても問題は解決しません。行をコメントアウトするだけで、デザイン ビューが機能します。行が含まれていると (if[false == true] ステートメントを挿入した場合でも)、デザイナーはフォームではなくエラーを表示します。

4

2 に答える 2

5

コードの一部を次のようにラップしますif

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

Compact Framework を使用している場合は、次を使用します。

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

獣が実際に何であるかについては、モード情報に関するこの投稿を参照してください。DesignMode

于 2009-05-05T09:09:38.930 に答える