Windows環境でのGUIプログラムのサンプル集です。
Windows10 で動作確認しています。
コンボボックス
プルダウンメニュから選択する
下記 TEMPLATE.xml の type="main" の < DIR> の値をフォームのコンボボックス(プルダウンメニュ)の項目として使用する。
コンボボックスにて項目を選択したら、イベントを受信して選択した内容をコンソールに表示している。
実行例
参考にしたサイト
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
プルダウンメニュから時刻を選択する
時・分・秒を選択して「OK」を押下したら、選択した時刻をコンソールに表示するプログラム。
実行例
TimeSelect.ps1
# アセンブリのロード Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # 時刻の取得 $HH = Get-Date -format "HH" # Hour $MM = Get-Date -format "mm" # Minute $SS = Get-Date -format "ss" # Second # フォームの作成 $Form = New-Object System.Windows.Forms.Form $Form.Size = "240,80" $Form.Startposition = "CenterScreen" $Form.Text = "TimeSelect" $comboBoxHH = New-Object System.Windows.Forms.Combobox $comboBoxHH.Location = New-Object System.Drawing.Point(10,10) $comboBoxHH.size = New-Object System.Drawing.Size(40,5) $comboBoxHH.DropDownStyle = "DropDown" $comboBoxHH.FlatStyle = "standard" $comboBoxHH.BackColor = "white" $comboBoxHH.ForeColor = "Black" for( $i = 0; $i -lt 24; $i++ ) { $str = $i.ToString("00") [void] $comboBoxHH.Items.Add($str) } $comboBoxHH.SelectedIndex = $HH $Form.Controls.Add($comboBoxHH) # 分の選択画面 $comboBoxMM = New-Object System.Windows.Forms.Combobox $comboBoxMM.Location = New-Object System.Drawing.Point(55,10) $comboBoxMM.size = New-Object System.Drawing.Size(40,5) $comboBoxMM.DropDownStyle = "DropDown" $comboBoxMM.FlatStyle = "standard" $comboBoxMM.BackColor = "white" $comboBoxMM.ForeColor = "Black" for( $i = 0; $i -lt 59; $i++ ) { $str = $i.ToString("00") [void] $comboBoxMM.Items.Add($str) } $comboBoxMM.SelectedIndex = $MM $Form.Controls.Add($comboBoxMM) # 秒の選択画面 $comboBoxSS = New-Object System.Windows.Forms.Combobox $comboBoxSS.Location = New-Object System.Drawing.Point(95,10) $comboBoxSS.size = New-Object System.Drawing.Size(40,5) $comboBoxSS.DropDownStyle = "DropDown" $comboBoxSS.FlatStyle = "standard" $comboBoxSS.BackColor = "white" $comboBoxSS.ForeColor = "Black" for( $i = 0; $i -lt 59; $i++ ) { $str = $i.ToString("00") [void] $comboBoxSS.Items.Add($str) } $comboBoxSS.SelectedIndex = $SS $Form.Controls.Add($comboBoxSS) # OKボタンの設定 $okButton = New-Object System.Windows.Forms.Button $okButton.Location = "170,10" $okButton.Size = "40,20" $okButton.Text = "OK" $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK # フォームにコントロールを追加 $Form.Controls.Add($okButton) # GUI を起動する $result = $Form.ShowDialog() # OK が押されたら選択した時刻を表示する if( $result -eq [System.Windows.Forms.DialogResult]::OK ) { write-host "$($comboBoxHH.text):$($comboBoxMM.text):$($comboBoxSS.text)" }
DateTimePicker コントロール
日付をカレンダ形式で選択する
最後に「OK」ボタンを押下すると選択した日付が表示される。
実行例
なお、コードの「$Date.ShowUpDown」の値を $True に変更すると次のように上下ボタンでの選択となる。
Calendar.ps1
# アセンブリのロード Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # フォームの作成 $Form = New-Object System.Windows.Forms.Form $Form.Size = "230,80" $Form.Startposition = "CenterScreen" $Form.Text = "Calendar" # カレンダ選択部の作成 $Date = New-Object System.Windows.Forms.DatetimePicker $Date.Location = New-Object System.Drawing.Point(10,10) $Date.Size = New-Object System.Drawing.Size(120,10) $Date.Format = "Custom" $Date.ShowUpDown = $False # ここを $True にすると上下ボタンでの選択になる $Date.CustomFormat = "yyyy/MM/dd" # フォームにコントロールを追加 $Form.Controls.Add($Date) # OKボタンの設定 $okButton = New-Object System.Windows.Forms.Button $okButton.Location = "160,10" $okButton.Size = "40,20" $okButton.Text = "OK" $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK # フォームにコントロールを追加 $Form.Controls.Add($okButton) # フォームを選択した状態にする $Form.Add_Shown($Form.Activate()) # GUI を起動する $result = $Form.ShowDialog() # OK が押されたら選択した日付を表示する if( $result -eq [System.Windows.Forms.DialogResult]::OK ) { write-host $Date.Value.Date.ToShortDateString() }