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で更新情報をお届けしています!
ぜひフォローをお願い致します!           
=============================================================

スポンサーリンク


2 件のコメント:

  1. Powershell初心者です。
    トグルボタンを利用したいと思い本記事に来ました。
    試してみて、「はい」の場合にTrue、「いいえ」の場合にFalse、または「はい」の場合「はい」という文字列を変数に入れたいと考えておりますが、実現できていない状況です。
    よろしければ実現方法をご教示いただけますでしょうか。

    返信削除
    返信
    1. こんにちは!匿名になっていますが、管理人です!

      ご質問についてですが、「ボタンを操作した際に、変数に文字列を格納する」ということでよろしいでしょうか。
      それであれば、事前に変数を宣言しておき、各ボタンのイベント内で任意の文字列を格納するようにすればいいと思います。

      具体的には次の通りです。

      ①変数の宣言
      $hoge = "False"
      この一文を、「#アセンブリのロード」の上に追加します。

      ②イベントへの追記
      CheckBox1のイベント内を次のように変更します。
      $change1 = {
      IF ( $CheckBox1.text -eq "はい")
      {
      $hoge = "False"
      $CheckBox1.text = "いいえ"
      }else{
      $hoge = "True"
      $CheckBox1.text = "はい"
      }
      }

      これで、CheckBox1を操作するたびに、変数hogeの内容が変化します。
      あとは例えば、OKボタンを押したさいに表示されるメッセージボックスで変数hogeの内容を表示させれば内容を確認することができます。

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

      回答は以上となりますが、ご希望に沿った内容になっておりますでしょうか。
      不明点ありましたら、またコメントをお寄せください!!

      削除

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