2015-07-18

PowerShellでユーザーフォームを作る - ラジオボタン編 -

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

以前の投稿で、インプットボックスやメッセージボックスをご紹介しましたが、それは非常にシンプルなものであり、使い勝手が良い反面、自由度が低いものでした。

過去の投稿はこちら↓↓
【PowerShellでInputBoxを使用する】
【PowerShellでMessageBoxを使用する】


ユーザーフォーム 5回目は「PowerShellでユーザーフォームを作る - ラジオボタン編 -」です。

   ユーザーフォーム 1回目 【PowerShellでユーザーフォームを作る - 基礎編 -
   ユーザーフォーム 2回目 【PowerShellでユーザーフォームを作る - オプション紹介 -
   ユーザーフォーム 3回目 【PoweShellでユーザーフォームを作る - リストボックス編 -
   ユーザーフォーム 4回目 【PowerShellでユーザーフォームを作る - チェックボックス編 -

ラジオボタン(RadioButton)は、選択肢をグループで括り、かつ、それぞれのグループ内で1つずつ選択させる場合に用いられます。


<今回の完成品>



Gerder(性別)グループとAge(年齢)グループに分かれているのが見えますでしょうか。

今回作成するものは、Genderグループから男性もしくは女性を選択し、Ageグループから年齢層を選択するものです。

前述の通り、それぞれのグループからは1つずつしか選択できません。

それでは例文を記述します。


---------ここから-------------------------------------------------------------------------------------
# ユーザーフォームを作る - ラジオボタン編 -

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

# フォームを作る
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(300,260)
$Form.Text = "Gender&Age"
$Form.StartPosition = "CenterScreen"

# Gender(性別)グループを作る
$MyGroupBox = New-Object System.Windows.Forms.GroupBox
$MyGroupBox.Location = New-Object System.Drawing.Point(10,10)
$MyGroupBox.size = New-Object System.Drawing.Size(125,100)
$MyGroupBox.text = "Gender"

# Gender(性別)グループの中のラジオボタンを作る
$RadioButton1 = New-Object System.Windows.Forms.RadioButton
$RadioButton1.Location = New-Object System.Drawing.Point(20,20)
$RadioButton1.size = New-Object System.Drawing.Size(80,30)
$RadioButton1.Checked = $True
$RadioButton1.Text = "Man"

$RadioButton2 = New-Object System.Windows.Forms.RadioButton
$RadioButton2.Location = New-Object System.Drawing.Point(20,60)
$RadioButton2.size = New-Object System.Drawing.Size(80,30)
$RadioButton2.Text = "Woman"

# Age(年齢)グループを作る
$MyGroupBox1 = New-Object System.Windows.Forms.GroupBox
$MyGroupBox1.Location = New-Object System.Drawing.Point(145,10)
$MyGroupBox1.size = New-Object System.Drawing.Size(100,140)
$MyGroupBox1.text = "Age"

# Age(年齢)グループの中のラジオボタンを作る
$RadioButton3 = New-Object System.Windows.Forms.RadioButton
$RadioButton3.Location = New-Object System.Drawing.Point(20,20)
$RadioButton3.size = New-Object System.Drawing.Size(80,30)
$RadioButton3.Checked = $True
$RadioButton3.Text = "11~20"

$RadioButton4 = New-Object System.Windows.Forms.RadioButton
$RadioButton4.Location = New-Object System.Drawing.Point(20,60)
$RadioButton4.size = New-Object System.Drawing.Size(80,30)
$RadioButton4.Text = "21~30"

$RadioButton5 = New-Object System.Windows.Forms.RadioButton
$RadioButton5.Location = New-Object System.Drawing.Point(20,100)
$RadioButton5.size = New-Object System.Drawing.Size(80,30)
$RadioButton5.Text = "31~40"

# OKボタンを作る
$OKButton = new-object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(55,170)
$OKButton.Size = New-Object System.Drawing.Size(80,40)
$OKButton.Text = "OK"
$OKButton.DialogResult = "OK"

# キャンセルボタンを作る
$CancelButton = new-object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(145,170)
$CancelButton.Size = New-Object System.Drawing.Size(80,40)
$CancelButton.Text = "キャンセル"
$CancelButton.DialogResult = "Cancel"

# グループにラジオボタンを入れる
$MyGroupBox.Controls.AddRange(@($Radiobutton1,$RadioButton2))
$MyGroupBox1.Controls.AddRange(@($Radiobutton3,$RadioButton4,$RadioButton5))

# フォームに各アイテムを入れる
$Form.Controls.AddRange(@($MyGroupBox,$MyGroupBox1,$OKButton,$CancelButton))

# Enterキー、Escキーと各ボタンの関連付け
$Form.AcceptButton = $OKButton
$Form.CancelButton = $CancelButton

# フォームをアクティブにする=Topmost?
$Form.TopMost = $True

# フォームを表示させ、押されたボタンの結果を受け取る
$dialogResult = $Form.ShowDialog()

# ボタン押下による条件分岐
if ($dialogResult -eq "OK"){
    # 性別の判定
    if ($RadioButton1.Checked){
    $Gender = "男性"
    }elseif ($RadioButton2.Checked){
    $Gender = "女性"
    }

    # 年齢の判定
    if ($RadioButton3.Checked){
    $Age = "10代"
    } elseif ($RadioButton4.Checked){
    $Age = "20代"
    }elseif ($RadioButton5.Checked){
    $Age = "30代"
    }

}else{
exit
}

[System.Windows.Forms.MessageBox]::Show("Gender(性別):$Gender`nAge   (年齢)年齢:$Age" , "結果")
---------ここまで-------------------------------------------------------------------------------------

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。
完成品と同じものが表示され、OKボタンを押すと選択した項目がメッセージボックスで表示するはずです。


それでは解説をしていきます。

*****解説*********************************************************

# Gender(性別)グループを作る
$MyGroupBox = New-Object System.Windows.Forms.GroupBox
$MyGroupBox.Location = New-Object System.Drawing.Point(10,10)
$MyGroupBox.size = New-Object System.Drawing.Size(125,100)
$MyGroupBox.text = "Gender"

ここではWindowsフォームのGroupBoxクラスを使用して、 1つめのGender(性別)グループを作成しています。
この時点では枠組みだけで、なにも中身がない状態です。
※Age(年齢)グループについては、ほぼ内容が同じなので省略します。


# Gender(性別)グループの中のラジオボタンを作る
$RadioButton1 = New-Object System.Windows.Forms.RadioButton
$RadioButton1.Location = New-Object System.Drawing.Point(20,20)
$RadioButton1.size = New-Object System.Drawing.Size(80,30)
$RadioButton1.Checked = $True
$RadioButton1.Text = "Man"


ここではWindowsフォームのRadioButtonクラスを使用して、Gender(性別)グループ内に入れるラジオボタンを作成しています。
また、Checkedプロパティは、デフォルトでチェックを入れておくかどうかのオプションです。
 ※Womanのラジオボタンと、Age(年齢)グループに入れるラジオボタンについては、記述内容がほぼ同じなので省略します。


# グループにラジオボタンを入れる
$MyGroupBox.Controls.AddRange(@($Radiobutton1,$RadioButton2))

ここで、作成したラジオボタンをグループに入れています。


# フォームに各アイテムを入れる
$Form.Controls.AddRange(@($MyGroupBox,$MyGroupBox1,$OKButton,$CancelButton))

さらにここで、作成したグループやOKボタン等をフォームに格納しています。

***********************************************************************************

解説は以上となります。
過去の記事で解説した部分についは省略させていただきました。
内容をご確認いただきたい場合は ユーザーフォーム - 基礎編 - をご覧ください。

今回は省略しましたが、もちろんラジオボタン使用時にも背景色や文字色、フォントの指定をすることもできます。
それぞれの設定方法については、 オプションの紹介 をご覧ください。 

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


0 件のコメント:

コメントを投稿

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