2010-12-06 11 views
1
var bmp = new Bitmap(16, 16); 
var gBmp = System.Drawing.Graphics.FromImage(bmp); 
Color col = Color.FromArgb(pdmsCol.Red, pdmsCol.Green, pdmsCol.Blue); 
gBmp.FillRectangle(new SolidBrush(col), new Rectangle(0, 0, 16, 16)); 
mColourPopupContainer.Image = bmp; 

上記のコードを使用すると、指定した色のコントロールに四角形が描画されます。これは、色がマゼンタでない限りうまくいきます。その場合、透明に描かれているようです。私はマゼンタを透明なものとして扱っているビットマップと関係があると思います。どのように私はこの動作をオフにするには?.net FillRectangleを使用したビットマップへの描画が失敗する場合マゼンタ

mColourPopupContainerは、UserControl(カスタムカラーピッカー)です。

+0

これはmColourPopupContainerと関係があります。それが何であっても、あなたの質問からは全く分かりません。 –

+0

編集:mColourPopupContainerはUserControl –

答えて

0

私の現在のソリューションは非常に素晴らしいではありません。マゼンタが使用されたときを検出し、ないマゼンタに変更します。

 var col = Color.FromArgb(r, g, b); 
     if (r==255 && g==0 && b==255) col = Color.FromArgb(r-1, g, b); // Don't use Megenta as it can be treated as transparent 
2

Form.TransparencyKeyプロパティをマゼンタ以外の色に設定する必要があります。このプロパティ:

フォームの透過領域を表す色を取得または設定します。

デフォルトでは、それはマゼンタなので、問題です。フォームの他のどこにも表示されない他の色に設定した場合、問題はなくなります。

+0

ですが、このコードはUserControl(カスタムカラーピッカー)内にあります。これは、親フォームに依存する必要があることを意味しますか? –

+0

はい。 MSDNから: "もし' TransparencyKey'プロパティに割り当てられた色がフォーム上のコントロールと同じであれば、透明に表示されます。 " – Donut

+0

しかし、私は親フォームへのアクセス権を持っていません。これは一般的なカラーピッカーコントロールであると考えられています。 –

関連する問題