【PowerShell】Windows環境でのGUIプログラム集 (サンプル集)

Windows環境でのGUIプログラムのサンプル集です。
Windows10 で動作確認しています。
 

 

コンボボックスを使う

下記 TEMPLATE.xml の type="main" の < DIR> の値をフォームのコンボボックス(プルダウンメニュ)の項目として使用する。
コンボボックスにて項目を選択したら、イベントを受信して選択した内容をコンソールに表示している。

 
実行例
f:id:dnkrnka:20181007044059p:plain
 
参考にしたサイト
PowerShellをはじめよう ~PowerShell入門~: PowerShellでユーザーフォームを作る - チェックボックス編 -
SelectedIndexChanged not triggering!
 
TEMPLATE.xml

<?xml version="1.0" encoding="UTF-8"?>
<BINS>
  <BIN type="main">
    <DIR>C:\work\PowerShellGui\output\rel-main-*_*</DIR>
  </BIN>
  <BIN type="sub">
    <DIR>C:\work\PowerShellGui\output\rel-sub-*_*</DIR>
  </BIN>
</BINS>

 
Form_ComboBox1.ps1

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

# フォントの指定
$Font = New-Object System.Drawing.Font("メイリオ",10)

# フォームの作成 
$form = New-Object System.Windows.Forms.Form
$form.Size = "850,280"
$form.Startposition = "CenterScreen"
$form.Text = "TEST"

# ラベルを作成
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,10)
$label.Size = New-Object System.Drawing.Size(240,20)
$label.Text = "パラメータを設定してください"
$form.Controls.Add($label)

#--------------------------------------------------------
# ファイル名選択
#--------------------------------------------------------
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,50)
$label.Size = New-Object System.Drawing.Size(130,15)
$label.Text = "ファイル名"
$form.Controls.Add($label)

$comboBox1 = New-Object System.Windows.Forms.Combobox
$comboBox1.Location = New-Object System.Drawing.Point(150,50)
$comboBox1.size = New-Object System.Drawing.Size(450,10)
$comboBox1.DropDownStyle = "DropDown"
$comboBox1.FlatStyle = "standard"
$comboBox1.font = $Font
$comboBox1.BackColor = "white"
$comboBox1.ForeColor = "Black"

# TEMPLATE.xml の内容を項目として使用する 
$ITEMS      = @()
$XML =[XML](Get-Content "TEMPLATE.xml")
foreach( $b in $XML.BINS.BIN[0] )
{
    # コンボボックスに項目を追加
    [void] $comboBox1.Items.Add($b.DIR)
}

$ComboBox1.add_SelectedIndexChanged($ComboBox1_SelectedIndexChanged)

# フォームにコンボボックスを追加
$form.Controls.Add($comboBox1)

# -------------------------------------------------------------------------------
#                             Change triggered function
# -------------------------------------------------------------------------------

$ComboBox1_SelectedIndexChanged=
{
    write-host $ComboBox1.text
}

$ComboBox1.add_SelectedIndexChanged($ComboBox1_SelectedIndexChanged)


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

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

# フォームにアイテムを追加
$form.Controls.Add($label)
$form.Controls.Add($OKButton)
$form.Controls.Add($CancelButton)
$form.Controls.Add($ComboBox1)

# キーとボタンの関係
$form.AcceptButton = $OKButton
$form.CancelButton = $CancelButton

# フォームを最前面に表示
$form.Topmost = $True

# フォームを表示+選択結果を変数に格納
$result = $form.ShowDialog()

# 選択後、OKボタンが押された場合、選択項目を表示
if ($result -eq "OK")
{
    $AAA = $comboBox1.Text
}else{
    exit
}

Write-Host $AAA