2011年04月23日

半透明のフォームの作り方(2つのフォームを重ねる)

レイヤードウィンドウを使った半透明のフォームには、コントロールが描画されない、描画が重たい、などの問題がありました。それに、せっかくのC#なのに、WindowsAPIを呼び出して実行するのも良くありません(個人的に)
フォームのOpacityを設定すれば良いのですが、それではフォームに配置したコントロールも半透明になります。コントロールは不透明のまま、背景のみ半透明にするにはどうしたら良いでしょうか。
多少強引ですが、半透明のフォームの上に背景のみ透明にしたフォームを重ね合わせることで、解決を試みます。

まず、半透明のフォームを作ります。テキストボックスとボタンを配置しておきます。

public partial class Form1 : Form
{
    // テキスト
    private TextBox text1;

    // ボタン
    private Button button1;

    public Form1()
    {
        InitializeComponent();

        // テキストを生成して配置
        text1 = new TextBox();
        text1.Text = "テキスト1";
        text1.Left = 10;
        text1.Top = 10;
        this.Controls.Add(text1);

        // ボタンを生成して配置
        button1 = new Button();
        button1.Text = "ボタン2";
        button1.Left = 10;
        button1.Top = text1.Bottom + 10;
        this.Controls.Add(button1);

        // キャプション
        this.Text = "半透明フォーム";

        // 半透明指定
        this.Opacity = 0.75;
    }
}

もう一つ、上に重ねるフォームを作ります。重ねたときに分かるように、コントロールは右側に配置します。

public partial class Form2 : Form
{
    // テキスト
    private TextBox text2;

    // ボタン
    private Button button2;

    public Form2()
    {
        InitializeComponent();

        // テキストを生成して配置
        text2 = new TextBox();
        text2.Text = "テキスト2";
        text2.Left = 150;
        text2.Top = 10;
        this.Controls.Add(text2);

        // ボタンを生成して配置
        button2 = new Button();
        button2.Text = "ボタン2";
        button2.Left = 150;
        button2.Top = text2.Bottom + 10;
        this.Controls.Add(button2);

        // キャプション
        this.Text = "上重ねフォーム";
    }
}

この時点で両方のフォームを表示すると、このような感じになります。まだ上に重ねるフォームは不透明です。

private void Form1_Load(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.Show();
}

dual-form-1.png

続きます

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 20:01 | Comment(0) | TrackBack(0) | C#
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/44288583

この記事へのトラックバック