■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の描画が重複しないように工夫してみようと思いますので、上手くいきましたらまた報告します。
|
|