C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ユーザーコントロールの背景を透明にしたい


(過去ログ 109 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■65039 / inTopicNo.1)  ユーザーコントロールの背景を透明にしたい
  
□投稿者/ ニョッキ (1回)-(2013/01/30(Wed) 16:39:41)

分類:[VB.NET/VB2005 以降] 

VB2008・Windows XP〜7

こんにちは。
ユーザーコントロール1上にPictureBoxを配置してあり、その上に複数のユーザーコントロールを配置してあります。
ユーザーコントロール2は、ユーザーコントロール1上をドラッグで移動することが可能です。

ここで質問ですが、ユーザーコントロール2の背景色を透明にしたいと思い、色々調べて以下の情報にたどり着きました。

http://youryella.wankuma.com/Library/Extensions/Control/Transparent.aspx

ただし、これを参考にすると、ユーザーコントロール2が複数重なった場合に再描画が非常に遅くなります。
(何個も重ねるようにしたらメモリ不足のエラーが発生しました。)

ユーザーコントロール2が重なっている場合、多分親コントロールから自分までの間の他コントロールの描画処理が重複していて、
何だか無駄に描画回数が増えているように思うのですが、何かいいアイディアはないでしょうか?

よろしくお願い申し上げます。
引用返信 編集キー/
■65041 / inTopicNo.2)  Re[1]: ユーザーコントロールの背景を透明にしたい
□投稿者/ Azulean (89回)-(2013/01/30(Wed) 22:47:27)
リージョンで切り抜くぐらいでしょうか。
(透過させるコントロールの描画や表示内容次第ですが)

透過領域が頻繁に変わるようなケースだと、リージョンは厳しいかもしれません。
その場合、重なった場合の描画処理の重複は避けられないかと思いますので、コントロールを分けるのではなく、一つのコントロール上の描画で表現できないかを検討するべきでしょう。
引用返信 編集キー/
■65045 / inTopicNo.3)  Re[2]: ユーザーコントロールの背景を透明にしたい
□投稿者/ ニョッキ (2回)-(2013/01/31(Thu) 11:58:50)
No65041 (Azulean さん) に返信
> リージョンで切り抜くぐらいでしょうか。
> (透過させるコントロールの描画や表示内容次第ですが)
>
> 透過領域が頻繁に変わるようなケースだと、リージョンは厳しいかもしれません。
> その場合、重なった場合の描画処理の重複は避けられないかと思いますので、コントロールを分けるのではなく、一つのコントロール上の描画で表現できないかを検討するべきでしょう。

Azulean 様、コメント有難うございます。
参考サイト(http://youryella.wankuma.com/Library/Extensions/Control/Transparent.aspx
の「ソースコード」のところのコンストラクタで、以下2行目以降のコードを加えたところ、
ユーザーコントロール2を意図的に重ねようとした時のメモリ不足エラーは消えました。
(なお、以下の1行目は、すでに参考サイトのコンストラクタに記載されています。)

Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.DoubleBuffer, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
MyBase.BackColor = Color.Transparent
※これらのコードは、 http://vsug.jp/tabid/63/forumid/48/threadid/5529/scope/posts/Default.aspx を参考にしました。

ただし、複数のユーザーコントロール2の重なりが多いと、大元のフォーム描画時のコントロール描画がまだ遅いです。
ちょっと、ユーザーコントロール2の描画が重複しないように工夫してみようと思いますので、上手くいきましたらまた報告します。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -