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()