ラジオボタンのグループを作成するには、System.Windows.Formsクラスを使います。
ラジオボタンは、GroupBoxやPanelなどの同じコンテナに配置すると自動的にグループ化されます。
基本的に、
- RadioButtonは親コンテナ単位で排他制御される
- 同じ
GroupBoxやPanelに入れたラジオボタン動詞は1つしか選択できない
という性質があります。
具体的なスクリプト
PowerShell
# Main Windows
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# フォーム作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "フォーム"
$form.MinimumSize = New-Object System.Drawing.Size(900,600)
$form.Size = New-Object System.Drawing.Size(1200,800)
$form.MinimumSize = New-Object System.Drawing.Size(1200,800)
$form.MaximumSize = New-Object System.Drawing.Size(1500, 1000)
$groupBox = New-Object System.Windows.Forms.GroupBox
$groupBox.Text = "選択してください"
$groupBox.Location = New-Object System.Drawing.Point(10,10)
$groupBox.Size = New-Object System.Drawing.Size(260,100)
$radio1 = New-Object System.Windows.Forms.RadioButton -Property @{
Text = "Option 1"
Location = '10,20'
Tag = "opt1"
Checked = $true
}
$radio2 = New-Object System.Windows.Forms.RadioButton -Property @{
Text = "Option 2"
Location = '10,45'
Tag = "opt2"
}
$radio3 = New-Object System.Windows.Forms.RadioButton -Property @{
Text = "Option 3"
Location = '10,70'
Tag = "opt3"
}
# GroupBox に追加
$groupBox.Controls.AddRange(@($radio1,$radio2,$radio3))
# 実行ボタン
$execButton = New-Object System.Windows.Forms.Button -Property @{
Text = "OK"
Location = '100,110'
}
# Form に追加
$form.Controls.Add($groupBox)
$form.Controls.Add($execButton)
# 実行ボタンクリック時のイベント取得
$execButton.Add_Click({
# 選択されているラジオボタンを取得
$selected = $groupBox.Controls | Where-Object { $_ -is [System.Windows.forms.RadioButton] -and $_.Checked }
if ($selected) {
[System.Windows.Forms.MessageBox]::Show(
$($selected.Tag)
)
} else {
[System.Windows.Forms.MessageBos]::Show(
"選択なし"
)
}
})
# 表示
[void]$form.ShowDialog()説明
選択されたラジオボタンの取得
選択されたラジオボタンの値を取得するには、グループボックス内のオブジェクトのうちラジオボタンであるかどうかをis演算子によって型チェックし、かつチェックされているオブジェクトを絞り込みます。
PowerShell
$selected = $groupBox.Controls | Where-Object { $_ -is [System.Windows.forms.RadioButton] -and $_.Checked }また、値の取得はTextの値ではなくTagを使用することで表示と取得の値を分けることができるので柔軟に対応できます。