言語フィルタ:
概要
コントロールの背景を透過する方法を紹介します。
背景を透過にすると次のようになります。
| 透明 |
半透明 |
 |
 |
対象コントロール
- System.Windows.Forms.Control から派生しているクラス
解説
コントロールの背景を透過するには BackColor プロパティに Color.Transparent を設定します。また、アルファ値が 255 未満の値の色を設定することで、背景を半透明にすることが出来ます。
BackColor プロパティに Color.Transparent や半透明な色を設定するには ControlStyles.SupportsTransparentBackColor スタイルが適用されている必要があります。ControlStyles.SupportsTransparentBackColor スタイルを適用するには、コンストラクタで SetStyle メソッドを使用して True に設定します。一部のコントロールでは既に適用されているため、SetStyle メソッドを使用する必要はありません。コントロールに ControlStyles.SupportsTransparentBackColor スタイルが適用されているか確認するには GetStyle メソッドを使用します。
Public Sub New()
Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Me.BackColor = Color.Transparent ' 透明
Me.BackColor = Color.FromArgb(100, 255, 255, 255) ' 半透明
End Sub
public TransparentPictureBox() // コンストラクタ
{
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent; // 透明
this.BackColor = Color.FromArgb(100, 255, 255, 255); // 半透明
}
背景を透明にした部分に表示されるのは親コントロールです。親コントロールとの間に別のコントロールがある場合でも、そのコントロールは表示されません。別のコントロールも表示されるようにするには「ラベルの背景を透過する」を参照してください。
よくあるのが PictureBox コントロールの上に背景を透過させた Label コントロールを配置しても、背景が透過されないという現象です。これは Label コントロールの親コントロールが Form になっているために発生します。親コントロールを PictureBox コントロールにしてやるだけで Label コントロールは透過されるようになります。
Me.Label1.Parent = Me.PictureBox1
' ラベルの位置を再設定します
Me.Label1.Location = New Point(Me.Label1.Left - Me.PictureBox1.Left, Me.Label1.Top - Me.PictureBox1.Top)
this.label1.Parent = this.pictureBox1;
// ラベルの位置を再設定します
this.label1.Location = new Point(this.label1.Left - this.pictureBox1.Left, this.label1.Top - this.pictureBox1.Top);
親コントロールを変更するとコントロールの位置も変更する必要がありますので注意が必要です。
ソースコード
PictureBox コントロールの背景を透過するサンプルを紹介します。
PictureBox コントロールは ControlStyles.SupportsTransparentBackColor スタイルが適用済みのため SetStyle メソッドを使用する必要はありません。
BackColor プロパティの初期値を Color.Transparent に変更してあります。
Imports System
Imports System.Drawing
Namespace Extentions
Public Class TransparentPictureBox
Inherits System.Windows.Forms.PictureBox
Public Sub New()
Me.BackColor = Color.Transparent
End Sub
End Class
End Namespace
using System;
using System.Drawing;
namespace Extentions
{
class TransparentPictureBox : System.Windows.Forms.PictureBox
{
public TransparentPictureBox()
{
this.BackColor = Color.Transparent;
}
}
}