21でWindowsフォームアプリケーションのフォームの透明度(不透明度)を設定する方法を紹介します。
透明度を指定することでフォームを半透明にできます。
本記事ではVisual Studioで作成した、Windowsフォームアプリケーションのプロジェクトに記述するコードを記載します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。
目次
フォームの透明度(不透明度)を設定する
フォームの透明度(不透明度)を設定するには、System.Windows.Forms名前空間にあるFormクラスのOpacityプロパティを使用します。
デザイナーのプロパティグリッドで設定する
フォームの透明度(不透明度)はフォームデザイナーのプロパティグリッドで設定できます。
フォームデザイナーを開きます。
フォームデザイナーを開いたらプロパティウィンドウを表示します。
プロパティウィンドウが表示されていない場合はメニューバーの「表示」メニューにある「プロパティ ウィンドウ」をクリックするかF4キーを押してください。
上記の画像のプロパティグリッドは項目別ではなくアルファベット順で表示しています。
デザイナーのプロパティグリッドにあるOpacityプロパティのテキストボックスに0~100の値を入力します。0を指定すると完全に透明になります。100を指定すると完全に不透明になります。ですのでOpacityプロパティに指定するパーセンテージは不透明度を表す値になります。
ここではサンプルとして75%に設定します。
不透明度を75%に設定したフォームを表示します。
コードで設定する
フォームの透明度(不透明度)はコードで設定することもできます。
1 2 3 4 |
SampleForm form = new SampleForm(); // フォームの透明度(不透明度)を50%にする form.Opacity = 0.5D; form.ShowDialog(); |
コードで指定する場合はパーセントではなく0~1の値を指定します。50%であれば0.5D、75%であれば0.75Dと指定します。
サンプルプログラム
ここではサンプルプログラムとして、フェードイン、フェードアウトをするダイアログフォームを作成してみます。
フェードインとフェードアウトはタイマー(System.Windows.Forms名前空間にあるTimerクラス)を使用して、0.01秒ごとに1%ずつフォームの不透明度を上げたり下げたりします。
ユーザーインターフェース
フォームのデザイナーにタイマーを追加します。
ソースコード
フォームのLoadイベントでフェードインします。
フォームのFormClosingイベントでフェードアウトします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // フェードスタイル private enum FadeStyle { // フェードイン In, // フェードアウト Out } // フェードインするかフェードアウトするか private FadeStyle _fadeStyle; // コンストラクタ public Form1() { InitializeComponent(); // 初期状態でフォームを完全に透明にしておく Opacity = 0d; // タイマーのインターバルを0.01秒に設定 timer1.Interval = 10; // フォームの読み込みイベント Load += Form1_Load; // フォームを閉じるイベント FormClosing += Form1_FormClosing; // タイマーのTickイベント timer1.Tick += Timer1_Tick; } // フォームの読み込みイベントハンドラ private void Form1_Load(object sender, EventArgs e) { try { // フェードインを指定 _fadeStyle = FadeStyle.In; // タイマーを有効にする timer1.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } // フォームを閉じるイベントハンドラ private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { if (Opacity > 0) { // フォームが完全に透明でない場合は閉じる処理をキャンセル e.Cancel = true; } // フェードアウトを指定 _fadeStyle = FadeStyle.Out; // タイマーを有効にする timer1.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } // タイマーのTickイベントハンドラ private void Timer1_Tick(object sender, EventArgs e) { Form form = this; double opacity = form.Opacity; try { if (_fadeStyle == FadeStyle.In) { // フェードイン if (form.Opacity < 1) { form.Opacity += 0.01d; } if (form.Opacity == 1) { // 完全に不透明になったらタイマーを無効にする timer1.Enabled = false; } } else { // フェードアウト if (form.Opacity > 0) { form.Opacity -= 0.01d; } if (form.Opacity == 0) { // 完全に透明になったらタイマーを無効にする timer1.Enabled = false; // フォームを閉じる Close(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
プログラムの実行
プロジェクトをビルドしてプログラムを実行(デバッグ)します。
実行するとフォームが徐々に表示されます。
フォームの閉じるボタン(×ボタン)をクリックすると、フォームが徐々に消えていきます。