Skip Navigation Linksホーム > ライブラリ > コントロール > コントロールの背景を透過にする

コントロールの背景を透過する

言語フィルタ:

概要

コントロールの背景を透過する方法を紹介します。

背景を透過にすると次のようになります。

透明 半透明
sample1 sample2

対象コントロール

  • System.Windows.Forms.Control から派生しているクラス

解説

コントロールの背景を透過するには BackColor プロパティに Color.Transparent を設定します。また、アルファ値が 255 未満の値の色を設定することで、背景を半透明にすることが出来ます。

BackColor プロパティに Color.Transparent や半透明な色を設定するには ControlStyles.SupportsTransparentBackColor スタイルが適用されている必要があります。ControlStyles.SupportsTransparentBackColor スタイルを適用するには、コンストラクタで SetStyle メソッドを使用して True に設定します。一部のコントロールでは既に適用されているため、SetStyle メソッドを使用する必要はありません。コントロールに ControlStyles.SupportsTransparentBackColor スタイルが適用されているか確認するには GetStyle メソッドを使用します。

展開されたイメージ 背景を透明にする - Visual Basic
コピーイメージ コードのコピー
Public Sub New()
    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    Me.BackColor = Color.Transparent ' 透明
    Me.BackColor = Color.FromArgb(100, 255, 255, 255) ' 半透明
End Sub
展開されたイメージ 背景を透明にする - C#
コピーイメージ コードのコピー
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 コントロールは透過されるようになります。

展開されたイメージ 親コントロールを変更する - Visual Basic
コピーイメージ コードのコピー
Me.Label1.Parent = Me.PictureBox1
' ラベルの位置を再設定します
Me.Label1.Location = New Point(Me.Label1.Left - Me.PictureBox1.Left, Me.Label1.Top - Me.PictureBox1.Top)
展開されたイメージ 親コントロールを変更する - C#
コピーイメージ コードのコピー
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 に変更してあります。

展開されたイメージ Visual Basic
コピーイメージ コードのコピー
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
展開されたイメージ C#
コピーイメージ コードのコピー
using System;
using System.Drawing;

namespace Extentions
{
    class TransparentPictureBox : System.Windows.Forms.PictureBox
    {
        public TransparentPictureBox()
        {
            this.BackColor = Color.Transparent;
        }
    }
}