|
お返事ありがとうございます。まこです。
一応コンストラクタで
this.SetStyle(
ControlStyles.SupportsTransparentBackColor |
ControlStyles.Opaque |
ControlStyles.DoubleBuffer | // 描画をバッファで実行する
ControlStyles.UserPaint | // 描画は(OSでなく)独自に行う
ControlStyles.AllPaintingInWmPaint, // WM_ERASEBKGND を無視する
true ) ; // 指定したスタイルを適用「する」
というのはやっています。
あとは
// 透明度
public int BackAlfaColor
{
get
{
return BackColor.A;
}
set
{
if ((value >= 0) && (value <= 255))
{
BackColor = Color.FromArgb(value , BackColor);
Invalidate();
}
}
}
こんなのも作って透明度を変えれるようにもしました。
これをやって実際のフォームに貼り付けるとコンポーネントの背景が真っ黒になってしまいました。
多分自コンポーネントがあるせいで裏のコンポーネントがかぶっているエリアは描画してくれないのかなぁと
そんな気がしています。
■No2577 (刈歩 菜良 さん) に返信
>>ここで描画した部分以外は背景を透明にし、裏にあるコンポーネントを表示したいのですが、
>>何か方法はありますでしょうか?
> 単純に透過させたいだけでしょうか?
> それでしたらコンポーネントの背景色をColor.Transparentに指定すればOKです。
> しかし、透過色はデフォルトで設定できないので、コンポーネントのコンストラクターの中のInitializeComponent呼び出しより前に
>
> SetStyle(ControlStyles.UserPaint, true); //デフォルト値なので省略可
> SetStyle(ControlStyles.SupportsTransparentBackColor, true); //これが大事
>
> と記述する必要があります。
> それからコードでコンポーネントの背景に透過色を指定します。
> BackColor = Color.Transparent;
>
> 上記3行をまとめて書いてしまえばOKです。
>
> IDEのデザイナー上では透過色を指定できないので、必ずコードで指定してください。
|