2016-03-23

PowerShellでユーザーフォームを作る - トグルボタン編 -

PowerShellでは、ユーザーの好みに合わせて、独自にフォームを作成することができます。

今回は「PowerShellでユーザーフォームを作る - トグルボタン編 -」です。

トグルボタンとはいわゆる「スイッチ」のようなもので、ONの状態とOFFの状態を見た目で判別できるようになります。

<今回の完成品>


上記の「はい」と書いてあるボタンがトグルボタンです。
ボタンを1度押すと次のように変化します。


それではスクリプトを記述していきます。


# PowerShellでユーザーフォームを作る - トグルボタン編 -

# アセンブリのロード
Add-Type -AssemblyName System.Windows.Forms

# フォーム
$form = New-Object System.Windows.Forms.Form
$form.Size = "260,200"
$form.StartPosition = "CenterScreen"
$form.Text = "選択"
$form.TopLevel = $True
$form.MinimizeBox = $False
$form.MaximizeBox = $False

# ラベル1
$label1 = New-Object System.Windows.Forms.Label
$label1.Location = "10,20"
$label1.Size = "160,30"
$label1.Text = "問1) あなたは男性ですか?"
$label1.TextAlign = "MiddleLeft"

# チェックボックス1
$CheckBox1 = New-Object System.Windows.Forms.CheckBox
$CheckBox1.location = "180,20"
$CheckBox1.size = "50,30"
$CheckBox1.Text = "はい"
$CheckBox1.TextAlign = "MiddleCenter"
$CheckBox1.Appearance = "Button"
$CheckBox1.FlatStyle = "System"
$change1 = {
    IF ( $CheckBox1.text -eq "はい")
    {
        $CheckBox1.text = "いいえ"
    }else{
        $CheckBox1.text = "はい"
    }
}
$CheckBox1.Add_CheckedChanged($change1)

# ラベル2
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = "10,60"
$label2.Size = "160,30"
$label2.Text = "問2) あなたは10代ですか?"
$label2.TextAlign = "MiddleLeft"

# チェックボックス2
$CheckBox2 = New-Object System.Windows.Forms.CheckBox
$CheckBox2.location = "180,60"
$CheckBox2.size = "50,30"
$CheckBox2.Text = "はい"
$CheckBox2.TextAlign = "MiddleCenter"
$CheckBox2.Appearance = "Button"
$CheckBox2.FlatStyle = "System"
$change2 = {
    IF ( $CheckBox2.text -eq "はい")
    {
        $CheckBox2.text = "いいえ"
    }else{
        $CheckBox2.text = "はい"
    }
}
$CheckBox2.Add_CheckedChanged($change2)

# OKボタン
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = "30,120"
$OKButton.Size = "75,30"
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK

# キャンセルボタン
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = "130,120"
$CancelButton.Size = "75,30"
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel

# フォームにアイテムを追加
$form.Controls.AddRange(@($label1,$label2,$CheckBox1,$CheckBox2,$OKButton,$CancelButton))

# フォームを表示
$result = $Form.ShowDialog()

if( $result -eq "OK" )
{
    [System.Windows.Forms.MessageBox]::Show("回答ありがとうございました", "<感謝>")
}

上記内容をコピーし、PowerShell ISEに貼り付け後、任意のファイル名で保存してください。
保存したps1ファイルを右クリックし、「PowerShellで実行」をクリックすると上の画像と同じものが表示されるはずです。

続いて解説をしていきます。

※過去の記事で解説した部分については割愛致します。
 内容をご確認いただきたい場合は【ユーザーフォーム - 基礎編 -】をご覧ください。

*****解説*****************************************************************************
# チェックボックス1
$CheckBox1 = New-Object System.Windows.Forms.CheckBox
$CheckBox1.location = "180,20"
$CheckBox1.size = "50,30"
$CheckBox1.Text = "はい"
$CheckBox1.TextAlign = "MiddleCenter"
$CheckBox1.Appearance = "Button"
$CheckBox1.FlatStyle = "System"

まず最初に申し上げておきたいのは、「”ToggleButtonクラス”なんてものはない!」ということです。
トグルボタンを実装するには、「CheckBoxクラス」を使用します。
チェックの有無=ON/OFFの状態と同じということですね。

この記述では、CheckBoxクラスをインスタンス化しています。
さらにAppearanceプロパティの値を「Button」に設定しています。
こうすることで、チェックボックスの見た目が通常の□からボタンに変化します。
$change1 = {
    IF ( $CheckBox1.text -eq "はい")
    {
        $CheckBox1.text = "いいえ"
    }else{
        $CheckBox1.text = "はい"
    }
}
$CheckBox1.Add_CheckedChanged($change1)

続いて、チェックボックスのイベントを設定しています。
イベントの発生するタイミングは「チェック状態が変化した時」です。
今回はチェックボックスの見た目をボタンにしていますので、感覚的には「ボタンを押した時」となります。
イベントの内容としては、ボタンの(チェックボックスの)テキストが「はい」のときは「いいえ」に変更し、「いいえ」のときは「はい」に変更するものです。

*************************************************************************************************
解説は以上となります。

トグルボタンの特徴としては、「選択されているかどうか」を簡単に判別できるところにあります。

たとえば、トグルボタンとフォームの背景色を連携させて、「ONのときは背景が赤くなり、OFFのときは通常色になる」といった使い方もできます。

同じチェックボックスでも、□のものは押しにくい・見にくいと思われる使用者もいるかもしれません。
そんなときは、トグルボタンを一度検討されてみてはいかがでしょうか。

=============================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=============================================================

スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/