透明な境界線を持つイメージをコントロールの背景として表示しようとしました。次のように透明な背景を使用した描画コントロール
残念ながら、透明な領域は、親フォームに穴を作成します:上の画像で
、フォームは私が私のコントロールの後ろに見ることを望んだのだ赤色の背景を持っています透明な領域。次のように
Iが使用されるコードである:私はONMOUSEMOVEおよびonMouseUpのイベントを実装する制御を必要とするので
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
このクラスはピクチャから継承されています。
私は、さまざまなアイデアをテストすることなく、ほとんどの時間を研究していますが、残念なことに、大部分は.Net CFではなくフルフレームワークでのみ動作します。
アイデアをいただければ幸いです。
うわー、ありがとう。非常に有用で詳細な説明。あなたは確かにそのテーマにしばらく時間を費やしました。 –
@ctacke私はあなたのものに非常に近いTransparencyソリューションを考え出しました。これはデザイナーだけでなく実行時にも機能します。私は最近、 "Parent.Parent"のことが機能しないため、Container Controlsをネストするときに私のソリューションが動作しないことに気付きました。私は、 "Parent.Parent"をthis.TopLevelControlに切り替えることを試みました。これは実行時には動作しますが、設計時には動作しません。コンテナコントロール内に透明なコントロールを入れ子にするためのソリューションを手に入れたことがありますが、デザイナーはまだコントロールを透明にしていますか? –
私は何年も前に自分のコントロールのデザイナーのサポートを受けることをやめようとしました。それは私にとってそれほど重要ではなかったし、常に壊れやすいものでした。時にはそれはうまくいくでしょうし、そうでない時もありました。私は実際には何もしませんでしたので、デザイナーはコントロールが行き渡る矩形をレイアウトするのに苦労しませんでした。 – ctacke