この記事では、Windowsフォームを利用してListViewのデーター部分、ヘッダー部分の背景色を変更する方法について説明します。
ユーザーフォームの作成: 【PowerShellでユーザーフォームを作成する
ListViewの作成: 【Powershell】ListViewにデータを表示する
ListViewにデータを表示する
ListViewにデータを表示する一連の処理は、以下のように記述することができます。
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object Windows.Forms.Form
$form.Text = "ListViewのサンプル"
$form.Width = 250
$form.Height = 300
$listView = New-Object System.Windows.Forms.ListView
$listView.View = "Details"
$listView.FullRowSelect = $true
$listView.GridLines = $true
$listView.Size = "180, 200"
$listView.Location = "20, 20"
# 列を追加する
$columns = @("番号", "名前", "年齢")
foreach ($column in $columns) {
$listView.Columns.Add($column) | Out-Null
}
# サンプルデータを配列に設定
$testData = @(
@{ ID = 1; 名前 = "山田 太郎"; 年齢 = 30 },
@{ ID = 2; 名前 = "鈴木 次郎"; 年齢 = 25 },
@{ ID = 3; 名前 = "佐藤 花子"; 年齢 = 28 }
# データをリストビューに追加する
foreach ($data in $testData) {
$item = New-Object System.Windows.Forms.ListViewItem($data.ID)
$item.SubItems.Add($data.名前) | Out-Null
$item.SubItems.Add($data.年齢.ToString()) | Out-Null
$listView.Items.Add($item) | Out-Null
}
$form.Controls.Add($listView)
[void]$form.ShowDialog()
実行すると、以下のように表示されます。
ListViewの背景色を変更する
このListViewの背景色(データの部分)を変更するには、BackColor プロパティを使用します。
# リストビューの背景色を黄色に設定
$listView.BackColor = "YELLOW"
実行すると、以下のように表示されます。
ListViewのヘッダーの背景色を変更する
ListViewの背景色の変更は、プロパティ値に設定する、といった方法ではできません。今回は、Add_DrawColumnHeaderイベントを使用して、ListViewの背景色を変更する方法を説明します。
参考: ListView.DrawColumnHeader イベント (System.Windows.Forms) | Microsoft Learn
まず、このイベントを発生させるには、OwnerDraw プロパティが true である必要があります。
これは、ListView コントロールを描画したのが、オペレーティング システムなのか、カスタマイズしたものかを取得または設定します。
カスタマイズによって ListView コントロールを描画する場合は true、オペレーティング システムによって ListView コントロールを描画する場合は falseです。 (既定値:false)
参考: ListView.OwnerDraw プロパティ (System.Windows.Forms) | Microsoft Learn
以下のように記述します。
$listView.OwnerDraw = $true # カスタム描画
Add_DrawColumnHeaderイベント ハンドラーの実装例です。
$listView.Add_DrawColumnHeader({
param($sender, $e)
$e.Graphics.FillRectangle([System.Drawing.Brushes]::Papayawhip, $e.Bounds)
$e.DrawText()
})
これはヘッダーの背景色を薄い黄色(Papayawhip)に変更しています。
実行すると、以下のように表示されます。
実行した画面を見ると、データが表示されていません。
データ部はListViewItem に既定の描画が使用されるように、Add_DrawSubItemイベントでDrawDefaultプロパティを設定します。
参考: ListView.DrawSubItem Event (System.Windows.Forms) | Microsoft Learn
参考: DrawListViewItemEventArgs.DrawDefault プロパティ (System.Windows.Forms) | Microsoft Learn
Add_DrawSubItemイベント ハンドラーの実装例です。
$listView.Add_DrawSubItem({
param($sender, $e)
$e.DrawDefault = $true
})
実行すると、以下のように表示されます。データも表示されました。
完全なコード
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object Windows.Forms.Form
$form.Text = "ListViewのサンプル"
$form.Width = 250
$form.Height = 300
$listView = New-Object System.Windows.Forms.ListView
$listView.View = "Details"
$listView.FullRowSelect = $true
$listView.GridLines = $true
$listView.Size = "180, 200"
$listView.Location = "20, 20"
# 列を追加する
$columns = @("番号", "名前", "年齢")
foreach ($column in $columns) {
$listView.Columns.Add($column) | Out-Null
}
# サンプルデータを配列に設定
$testData = @(
@{ ID = 1; 名前 = "山田 太郎"; 年齢 = 30 },
@{ ID = 2; 名前 = "鈴木 次郎"; 年齢 = 25 },
@{ ID = 3; 名前 = "佐藤 花子"; 年齢 = 28 }
# データをリストビューに追加する
foreach ($data in $testData) {
$item = New-Object System.Windows.Forms.ListViewItem($data.ID)
$item.SubItems.Add($data.名前) | Out-Null
$item.SubItems.Add($data.年齢.ToString()) | Out-Null
$listView.Items.Add($item) | Out-Null
}
$listView.OwnerDraw = $true # カスタム描画
# Add_DrawColumnHeaderイベント ハンドラー
$listView.Add_DrawColumnHeader({
param($sender, $e)
$e.Graphics.FillRectangle([System.Drawing.Brushes]::Papayawhip, $e.Bounds)
$e.DrawText()
})
# Add_DrawSubItemイベント ハンドラー
$listView.Add_DrawSubItem({
param($sender, $e)
$e.DrawDefault = $true
})
$form.Controls.Add($listView)
[void]$form.ShowDialog()
まとめ
今回は、Windowsフォームを利用してListViewのデーター部分、ヘッダー部分の背景色を変更する方法について説明しました。