[C#] ListViewコントロールの使い方

C#のListViewコントロールは、Windowsフォームアプリケーションでリスト形式のデータを表示するためのUIコンポーネントです。

ListViewは、詳細表示、リスト表示、アイコン表示、タイル表示の4つのビューをサポートしています。

データはListViewItemオブジェクトとして追加され、各アイテムにはサブアイテムを持たせることができます。

列ヘッダーを使用して、詳細ビューでデータを整理することが可能です。

ListViewのプロパティやイベントを利用して、選択されたアイテムの取得や、アイテムの追加・削除、並べ替えなどの操作を行うことができます。

デザインビューでの設定や、コードビハインドでの動的な操作が可能です。

この記事でわかること
  • ListViewコントロールの基本的な使い方
  • 表示モードの種類と特徴
  • プロパティとイベントの活用法
  • アイテムのカスタマイズ方法
  • 実際のアプリケーションでの応用例

目次から探す

ListViewコントロールの概要

ListViewコントロールは、C#のWindowsフォームアプリケーションにおいて、複数のアイテムをリスト形式で表示するための強力なツールです。

このコントロールは、アイテムを詳細表示、リスト表示、アイコン表示、タイル表示など、さまざまな形式で表示できる柔軟性を持っています。

さらに、各アイテムにはサブアイテムを追加することができ、情報を階層的に整理することが可能です。

ListViewは、ユーザーがアイテムを選択したり、並べ替えたり、グループ化したりする機能を提供し、データの視覚的な管理を容易にします。

これにより、ファイルエクスプローラーやタスク管理アプリケーションなど、さまざまなアプリケーションで利用されています。

ListViewの基本的な使い方

ListViewの追加方法

ListViewコントロールをフォームに追加するには、Visual Studioのデザイナーを使用します。

以下の手順で追加できます。

  1. ツールボックスから ListView を選択します。
  2. フォーム上にドラッグ&ドロップします。
  3. プロパティウィンドウで必要な設定を行います。

サンプルコードは以下の通りです。

partial class MyForm : Form
{
    private ListView listView;
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView = new ListView(); // ListViewのインスタンスを作成
        listView.Location = new Point(10, 10); // 位置を設定
        listView.Size = new Size(300, 200); // サイズを設定
        this.Controls.Add(listView); // フォームに追加
    }
}

ListViewItemの追加

ListViewにアイテムを追加するには、ListViewItemクラスを使用します。

以下のコードでアイテムを追加できます。

ListViewItem item = new ListViewItem("アイテム1"); // 新しいアイテムを作成
listView.Items.Add(item); // ListViewにアイテムを追加

このコードを実行すると、ListViewに「アイテム1」が表示されます。

サブアイテムの設定

ListViewItemにはサブアイテムを追加することができます。

サブアイテムは、アイテムに関連する追加情報を表示するのに役立ちます。

以下のコードでサブアイテムを設定できます。

ListViewItem item = new ListViewItem("アイテム1"); // 新しいアイテムを作成
item.SubItems.Add("サブアイテム1"); // サブアイテムを追加
listView.Items.Add(item); // ListViewにアイテムを追加

このコードを実行すると、ListViewに「アイテム1」とそのサブアイテム「サブアイテム1」が表示されます。

列ヘッダーの設定

ListViewに列ヘッダーを追加するには、Columnsプロパティを使用します。

以下のコードで列ヘッダーを設定できます。

listView.View = View.Details; // 詳細表示モードに設定
listView.Columns.Add("列1", 100); // 列ヘッダーを追加
listView.Columns.Add("列2", 100); // 列ヘッダーを追加

このコードを実行すると、ListViewに2つの列ヘッダー「列1」と「列2」が表示されます。

ListViewの表示モード

ListViewコントロールは、異なる表示モードを提供しており、データの視覚的な表現を柔軟に変更できます。

以下に、主要な表示モードを説明します。

詳細表示モード

詳細表示モードでは、アイテムとそのサブアイテムを表形式で表示します。

このモードは、情報を整理して表示するのに適しています。

列ヘッダーが表示され、各アイテムの詳細情報を確認できます。

以下のコードで詳細表示モードを設定できます。

listView.View = View.Details; // 詳細表示モードに設定

リスト表示モード

リスト表示モードでは、アイテムが縦に並んで表示されます。

サブアイテムは表示されず、アイテム名のみが表示されるため、シンプルなリスト形式で情報を表示したい場合に適しています。

以下のコードでリスト表示モードを設定できます。

listView.View = View.List; // リスト表示モードに設定

アイコン表示モード

アイコン表示モードでは、アイテムがアイコン形式で表示されます。

各アイテムはアイコンとテキストで表示され、視覚的にわかりやすい形式です。

このモードは、画像やアイコンを多く使用するアプリケーションに適しています。

以下のコードでアイコン表示モードを設定できます。

listView.View = View.LargeIcon; // アイコン表示モードに設定

タイル表示モード

タイル表示モードでは、アイテムがタイル形式で表示され、アイテム名とともにサブアイテムも表示されます。

このモードは、情報を視覚的に整理しつつ、詳細も確認できるため、特に多くの情報を扱う場合に便利です。

以下のコードでタイル表示モードを設定できます。

listView.View = View.Tile; // タイル表示モードに設定

これらの表示モードを使い分けることで、ユーザーにとって使いやすいインターフェースを提供することができます。

ListViewのプロパティとイベント

ListViewコントロールは、さまざまなプロパティとイベントを提供しており、これによりユーザーインターフェースをカスタマイズし、インタラクションを管理できます。

以下に主要なプロパティとイベントを説明します。

主要なプロパティ

Viewプロパティ

Viewプロパティは、ListViewの表示モードを設定するためのプロパティです。

これにより、詳細表示、リスト表示、アイコン表示、タイル表示など、異なる形式でアイテムを表示できます。

以下のように設定します。

listView.View = View.Details; // 詳細表示モードに設定

Columnsプロパティ

Columnsプロパティは、ListViewに表示する列ヘッダーを管理するためのプロパティです。

このプロパティを使用して、列の数や名前、幅を設定できます。

以下のコードで列を追加できます。

listView.Columns.Add("列1", 100); // 列ヘッダーを追加
listView.Columns.Add("列2", 100); // 列ヘッダーを追加

Itemsプロパティ

Itemsプロパティは、ListViewに表示されるアイテムのコレクションを管理します。

このプロパティを使用して、アイテムの追加、削除、検索などを行うことができます。

以下のコードでアイテムを追加できます。

listView.Items.Add(new ListViewItem("アイテム1")); // アイテムを追加

主要なイベント

SelectedIndexChangedイベント

SelectedIndexChangedイベントは、ListView内の選択されたアイテムが変更されたときに発生します。

このイベントを使用して、ユーザーが選択したアイテムに基づいてアクションを実行できます。

以下のようにイベントハンドラーを設定します。

listView.SelectedIndexChanged += (sender, e) => 
{
    // 選択されたアイテムの処理
    var selectedItem = listView.SelectedItems[0]; // 選択されたアイテムを取得
};

ItemActivateイベント

ItemActivateイベントは、ユーザーがListView内のアイテムをダブルクリックしたときに発生します。

このイベントを使用して、アイテムに関連するアクションを実行することができます。

以下のようにイベントハンドラーを設定します。

listView.ItemActivate += (sender, e) => 
{
    // アイテムがアクティブになったときの処理
    var activatedItem = listView.SelectedItems[0]; // アクティブになったアイテムを取得
};

これらのプロパティとイベントを活用することで、ListViewコントロールの機能を最大限に引き出し、ユーザーにとって使いやすいインターフェースを提供できます。

ListViewのカスタマイズ

ListViewコントロールは、さまざまなカスタマイズが可能で、ユーザーのニーズに応じたインターフェースを提供できます。

以下に、アイテムの並べ替え、グループ化、カスタム描画について説明します。

アイテムの並べ替え

ListView内のアイテムを並べ替えるには、SortCompareイベントを使用します。

このイベントを利用して、アイテムの比較方法を定義することができます。

以下のコードは、アイテムをアルファベット順に並べ替える例です。

listView.Sorting = SortOrder.Ascending; // 昇順で並べ替え
listView.ColumnClick += (sender, e) => 
{
    // 列をクリックしたときの並べ替え処理
    listView.ListViewItemSorter = new ListViewItemComparer(e.Column); // カスタム比較クラスを設定
    listView.Sort(); // 並べ替えを実行
};

カスタム比較クラスは以下のように実装します。

class ListViewItemComparer : IComparer
{
    private int col;
    public ListViewItemComparer(int column)
    {
        col = column; // 並べ替えに使用する列を設定
    }
    public int Compare(object x, object y)
    {
        return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); // 比較処理
    }
}

アイテムのグループ化

ListViewでは、アイテムをグループ化することができます。

これにより、関連するアイテムをまとめて表示し、視覚的に整理することが可能です。

以下のコードでアイテムをグループ化できます。

listView.Groups.Add(new ListViewGroup("グループ1")); // 新しいグループを追加
listView.Items.Add(new ListViewItem("アイテム1", 0) { Group = listView.Groups[0] }); // グループにアイテムを追加
listView.Items.Add(new ListViewItem("アイテム2", 0) { Group = listView.Groups[0] }); // 同じグループにアイテムを追加

カスタム描画

ListViewのカスタム描画を行うことで、アイテムの外観を自由に変更できます。

これには、DrawItem、DrawSubItem、DrawColumnHeaderイベントを使用します。

以下のコードは、カスタム描画の基本的な例です。

listView.OwnerDraw = true; // カスタム描画を有効にする
listView.DrawItem += (sender, e) => 
{
    e.DrawDefault = true; // デフォルトの描画を使用
};
listView.DrawSubItem += (sender, e) => 
{
    e.DrawBackground(); // 背景を描画
    e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, Brushes.Black, e.Bounds); // テキストを描画
};
listView.DrawColumnHeader += (sender, e) => 
{
    e.DrawDefault = true; // デフォルトの描画を使用
};

これらのカスタマイズ機能を活用することで、ListViewコントロールをより魅力的で使いやすいものにすることができます。

ユーザーのニーズに応じたインターフェースを提供するために、これらの機能を適切に組み合わせて使用しましょう。

ListViewの応用例

ListViewコントロールは、さまざまなアプリケーションで利用されており、その柔軟性と機能性を活かして多くの場面で活用されています。

以下に、具体的な応用例をいくつか紹介します。

ファイルエクスプローラーの実装

ListViewを使用してファイルエクスプローラーを実装することができます。

この場合、ファイル名、サイズ、更新日時などの情報を列として表示し、ユーザーがファイルを選択したり、ダブルクリックして開いたりできるようにします。

以下は、基本的なファイルエクスプローラーの実装例です。

private void LoadFiles(string directoryPath)
{
    listView.Items.Clear(); // 既存のアイテムをクリア
    var files = Directory.GetFiles(directoryPath); // 指定したディレクトリ内のファイルを取得
    foreach (var file in files)
    {
        var fileInfo = new FileInfo(file); // ファイル情報を取得
        var item = new ListViewItem(fileInfo.Name); // ファイル名をアイテムとして追加
        item.SubItems.Add(fileInfo.Length.ToString()); // サイズをサブアイテムとして追加
        item.SubItems.Add(fileInfo.LastWriteTime.ToString()); // 更新日時をサブアイテムとして追加
        listView.Items.Add(item); // ListViewにアイテムを追加
    }
}

音楽プレイヤーのプレイリスト

ListViewを音楽プレイヤーのプレイリストとして使用することも可能です。

曲名、アーティスト名、アルバム名などの情報を表示し、ユーザーが曲を選択して再生できるようにします。

以下は、プレイリストの基本的な実装例です。

private void LoadPlaylist(List<Song> songs)
{
    listView.Items.Clear(); // 既存のアイテムをクリア
    foreach (var song in songs)
    {
        var item = new ListViewItem(song.Title); // 曲名をアイテムとして追加
        item.SubItems.Add(song.Artist); // アーティスト名をサブアイテムとして追加
        item.SubItems.Add(song.Album); // アルバム名をサブアイテムとして追加
        listView.Items.Add(item); // ListViewにアイテムを追加
    }
}

タスク管理アプリケーション

ListViewは、タスク管理アプリケーションにも適しています。

タスク名、期限、優先度などの情報を表示し、ユーザーがタスクを追加、編集、削除できるようにします。

以下は、タスク管理の基本的な実装例です。

private void LoadTasks(List<Task> tasks)
{
    listView.Items.Clear(); // 既存のアイテムをクリア
    foreach (var task in tasks)
    {
        var item = new ListViewItem(task.Name); // タスク名をアイテムとして追加
        item.SubItems.Add(task.DueDate.ToString("yyyy/MM/dd")); // 期限をサブアイテムとして追加
        item.SubItems.Add(task.Priority.ToString()); // 優先度をサブアイテムとして追加
        listView.Items.Add(item); // ListViewにアイテムを追加
    }
}

これらの応用例を通じて、ListViewコントロールの多様な使い方を理解し、実際のアプリケーションに活かすことができます。

ユーザーにとって使いやすいインターフェースを提供するために、ListViewの機能を最大限に活用しましょう。

よくある質問

ListViewのパフォーマンスを向上させるには?

ListViewのパフォーマンスを向上させるためには、以下の方法を検討できます。

  • VirtualModeを使用する: 大量のデータを扱う場合、VirtualModeを有効にすることで、必要なデータのみを表示し、メモリ使用量を削減できます。
  • BeginUpdate()とEndUpdate()を使用する: アイテムを追加する前にBeginUpdate()を呼び出し、追加後にEndUpdate()を呼び出すことで、描画の更新を一時的に停止し、パフォーマンスを向上させることができます。
  • 必要なデータのみを表示する: 表示するアイテムの数を制限し、必要な情報だけを表示することで、描画負荷を軽減できます。

ListViewで複数選択を有効にするには?

ListViewで複数選択を有効にするには、以下の手順を実行します。

  1. ListViewのプロパティウィンドウで、MultiSelectプロパティをtrueに設定します。
  2. コードで、選択されたアイテムを取得する際に、SelectedItemsコレクションを使用します。

以下の例のように、選択されたアイテムをループ処理することができます。

foreach (ListViewItem item in listView.SelectedItems)
{
    // 選択されたアイテムに対する処理
}

ListViewのアイテムを動的に更新する方法は?

ListViewのアイテムを動的に更新するには、以下の方法を使用します。

  • アイテムのプロパティを直接変更する: 既存のアイテムのテキストやサブアイテムを直接変更することができます。

以下の例では、特定のアイテムのテキストを更新しています。

listView.Items[0].Text = "新しいアイテム名"; // 最初のアイテムのテキストを更新
listView.Items[0].SubItems[1].Text = "新しいサブアイテム"; // サブアイテムを更新
  • アイテムを削除して再追加する: アイテムの内容が大きく変更される場合、既存のアイテムを削除し、新しいアイテムを追加することもできます。

以下のように実装します。

listView.Items.RemoveAt(0); // 最初のアイテムを削除
var newItem = new ListViewItem("新しいアイテム名"); // 新しいアイテムを作成
newItem.SubItems.Add("新しいサブアイテム"); // サブアイテムを追加
listView.Items.Add(newItem); // ListViewに新しいアイテムを追加

これらの方法を活用することで、ListViewのアイテムを動的に更新し、ユーザーに最新の情報を提供することができます。

まとめ

この記事では、C#のListViewコントロールの基本的な使い方から、カスタマイズ方法、応用例まで幅広く解説しました。

ListViewは、データを視覚的に整理し、ユーザーにとって使いやすいインターフェースを提供するための強力なツールです。

これを活用して、ファイルエクスプローラーや音楽プレイヤー、タスク管理アプリケーションなど、さまざまなアプリケーションを実装してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す