PowerShellを使用してWindows Formsアプリケーションを作成する方法を紹介します。具体的には、JSONデータを読み込んで、その内容を表形式でGUI表示するプログラムです。
基本設定
まず、必要な.NET Frameworkのアセンブリを読み込みます。これにはSystem.Windows.Forms
とSystem.Drawing
が含まれます。これらはGUIコンポーネントとグラフィックス描画に必要です。
JSONデータの準備
この例では、カテゴリーとアイテムが定義された入れ子JSONデータを使用します。ConvertFrom-Json
コマンドレットを使って、このJSON文字列をPowerShellオブジェクトに変換します。
$jsonData = @" { "Category": { "Category1": [ { "Key1": "Item1" }, { "Key2": "Item2" }, { "Key3": "Item3" } ], "Category2": [ { "Key1": "Item4" }, { "Key2": "Item5" }, { "Key3": "Item6" } ] } } "@ | ConvertFrom-Json
フォームの作成
System.Windows.Forms.Form
オブジェクトを作成し、フォームの基本設定を行います。フォームのタイトルや開始位置を設定することで、ユーザーインターフェイスの初期状態を定義します。
powershellCopy code
$form = New-Object System.Windows.Forms.Form $form.Text = 'Category Details' $form.StartPosition = 'CenterScreen'
TableLayoutPanelの設定
System.Windows.Forms.TableLayoutPanel
を使用して、動的に行を追加できる表形式のレイアウトを作成します。これは、カテゴリとアイテムを整理して表示するのに適した方法です。
$table = New-Object System.Windows.Forms.TableLayoutPanel $table.ColumnCount = 2 $table.RowCount = 1 $table.AutoSize = $true $table.AutoSizeMode = 'GrowAndShrink' $table.GrowStyle = 'FixedSize' $table.CellBorderStyle = 'Single' $form.Controls.Add($table)
カテゴリーラベルとアイテムの追加
カテゴリー名とそれに属するアイテムをTableLayoutPanel
に追加する関数を定義します。この関数では、カテゴリーごとにラベルを作成し、その下にアイテムを表示します。
# カテゴリーラベルとアイテムを追加する関数 function AddCategoryItemsToTable { param ( [Parameter(Mandatory = $true)][string]$categoryName, [Parameter(Mandatory = $true)][pscustomobject[]]$items ) # カテゴリーラベルの設定 $categoryLabel = New-Object System.Windows.Forms.Label $categoryLabel.Text = $categoryName $categoryLabel.BackColor = 'Green' $categoryLabel.ForeColor = 'White' $categoryLabel.Dock = 'Fill' $categoryLabel.TextAlign = 'MiddleCenter' $table.Controls.Add($categoryLabel) | Out-Null $table.SetColumnSpan($categoryLabel, 2) # カテゴリーのアイテムを追加 foreach ($item in $items) { foreach ($key in $item.psobject.Properties) { $keyLabel = New-Object System.Windows.Forms.Label $keyLabel.Text = $key.Name $keyLabel.Dock = 'Fill' $table.Controls.Add($keyLabel) | Out-Null $valueLabel = New-Object System.Windows.Forms.Label $valueLabel.Text = $key.Value $valueLabel.Dock = 'Fill' $table.Controls.Add($valueLabel) | Out-Null } } }
JSONデータからのテーブルへのアイテム追加
JSONデータをループして、各カテゴリとそのアイテムをTableLayoutPanel
に追加します。これにより、データが動的にフォームに表示されます。
# JSONデータからカテゴリーとアイテムをテーブルに追加 foreach ($category in $jsonData.Category.psobject.Properties) { $table.RowCount += $category.Value.Count + 1 AddCategoryItemsToTable -categoryName $category.Name -items $category.Value }
フォームの表示
最後に、フォームのサイズを内容に合わせて自動調整し、ShowDialog
メソッドを使ってフォームを表示します。
$form.AutoSize = $true $form.AutoSizeMode = 'GrowAndShrink' $form.ShowDialog()
最後に
このプログラムは、PowerShellを使ってWindows Formsアプリケーションを作成する基本的な方法を示しています。GUIを使用することで、スクリプトの出力をより視覚的に表示し、ユーザーインタラクションを向上させることができます。
以下はプログラムの全容です。
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # JSONデータ文字列 $jsonData = @" { "Category": { "Category1": [ { "Key1": "Item1" }, { "Key2": "Item2" }, { "Key3": "Item3" } ], "Category2": [ { "Key1": "Item4" }, { "Key2": "Item5" }, { "Key3": "Item6" } ] } } "@ | ConvertFrom-Json # フォームの基本設定 $form = New-Object System.Windows.Forms.Form $form.Text = 'Category Details' $form.StartPosition = 'CenterScreen' # TableLayoutPanelの設定 $table = New-Object System.Windows.Forms.TableLayoutPanel $table.ColumnCount = 2 $table.RowCount = 1 # 初期値は1行、後で行を追加します $table.AutoSize = $true $table.AutoSizeMode = 'GrowAndShrink' $table.GrowStyle = 'FixedSize' $table.CellBorderStyle = 'Single' $form.Controls.Add($table) # カテゴリーラベルとアイテムを追加する関数 function AddCategoryItemsToTable { param ( [Parameter(Mandatory = $true)][string]$categoryName, [Parameter(Mandatory = $true)][pscustomobject[]]$items ) # カテゴリーラベルの設定 $categoryLabel = New-Object System.Windows.Forms.Label $categoryLabel.Text = $categoryName $categoryLabel.BackColor = 'Green' $categoryLabel.ForeColor = 'White' $categoryLabel.Dock = 'Fill' $categoryLabel.TextAlign = 'MiddleCenter' $table.Controls.Add($categoryLabel) | Out-Null $table.SetColumnSpan($categoryLabel, 2) # カテゴリーのアイテムを追加 foreach ($item in $items) { foreach ($key in $item.psobject.Properties) { $keyLabel = New-Object System.Windows.Forms.Label $keyLabel.Text = $key.Name $keyLabel.Dock = 'Fill' $table.Controls.Add($keyLabel) | Out-Null $valueLabel = New-Object System.Windows.Forms.Label $valueLabel.Text = $key.Value $valueLabel.Dock = 'Fill' $table.Controls.Add($valueLabel) | Out-Null } } } # JSONデータからカテゴリーとアイテムをテーブルに追加 foreach ($category in $jsonData.Category.psobject.Properties) { $table.RowCount += $category.Value.Count + 1 AddCategoryItemsToTable -categoryName $category.Name -items $category.Value } # フォームのサイズを内容に合わせて調整 $form.AutoSize = $true $form.AutoSizeMode = 'GrowAndShrink' # フォームを表示 $form.ShowDialog()