【PowerShell】ListViewの背景色(データー部分、ヘッダー部分)を変更する

PowerShell

この記事では、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の背景色を変更する

このListViewの背景色(データの部分)を変更するには、BackColor プロパティを使用します。

# リストビューの背景色を黄色に設定
$listView.BackColor = "YELLOW"

実行すると、以下のように表示されます。

ListView

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)に変更しています。

実行すると、以下のように表示されます。

ListView

実行した画面を見ると、データが表示されていません。
データ部は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

})

実行すると、以下のように表示されます。データも表示されました。

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
}

$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のデーター部分、ヘッダー部分の背景色を変更する方法について説明しました。

タイトルとURLをコピーしました