[C#] ListViewにアイテムを追加する方法

C#でListViewにアイテムを追加するには、まずListViewItemオブジェクトを作成し、それをListViewItemsコレクションに追加します。

ListViewItemは、表示したいテキストやサブアイテムを含むことができます。

例えば、ListViewItem item = new ListViewItem("Item Text");でアイテムを作成し、listView.Items.Add(item);で追加します。

サブアイテムを持つ場合は、item.SubItems.Add("SubItem Text");を使用します。

これにより、ListViewに新しい行が追加され、指定したテキストが表示されます。

この記事でわかること
  • ListViewにアイテムを追加する方法
  • ListViewのイベント処理の実装
  • ListViewの応用例とカスタマイズ
  • ListViewのパフォーマンス最適化手法

目次から探す

ListViewにアイテムを追加する方法

ListViewItemの作成

ListViewにアイテムを追加するためには、まずListViewItemオブジェクトを作成します。

ListViewItemは、ListViewに表示される各アイテムを表します。

以下のサンプルコードでは、ListViewItemを作成する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ListViewItemの作成
        ListViewItem item = new ListViewItem("アイテム1"); // アイテム名を指定
    }
}

このコードでは、”アイテム1″という名前のListViewItemを作成しています。

ListViewItemのコンストラクタにアイテム名を渡すことで、簡単にアイテムを作成できます。

ListViewItemの追加

作成したListViewItemをListViewに追加するには、Items.Addメソッドを使用します。

以下のサンプルコードでは、ListViewにアイテムを追加する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ListViewItemの作成
        ListViewItem item = new ListViewItem("アイテム1"); // アイテム名を指定
        // ListViewにアイテムを追加
        myListView.Items.Add(item); // myListViewはListViewの名前
    }
}

このコードでは、myListViewという名前のListViewに、先ほど作成したListViewItemを追加しています。

Items.Addメソッドを使うことで、簡単にアイテムをListViewに追加できます。

サブアイテムの追加

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

サブアイテムは、アイテムの詳細情報を表示するために使用されます。

以下のサンプルコードでは、サブアイテムを追加する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ListViewItemの作成
        ListViewItem item = new ListViewItem("アイテム1"); // アイテム名を指定
        // サブアイテムの追加
        item.SubItems.Add("サブアイテム1"); // サブアイテムを追加
        item.SubItems.Add("サブアイテム2"); // さらにサブアイテムを追加
        // ListViewにアイテムを追加
        myListView.Items.Add(item); // myListViewはListViewの名前
    }
}

このコードでは、”アイテム1″に対して2つのサブアイテムを追加しています。

サブアイテムは、SubItems.Addメソッドを使用して追加します。

これにより、ListViewの各アイテムに対して詳細情報を表示できます。

アイテムのカスタマイズ

ListViewのアイテムは、さまざまなプロパティを使用してカスタマイズできます。

例えば、アイテムの色やフォントを変更することができます。

以下のサンプルコードでは、アイテムの色を変更する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ListViewItemの作成
        ListViewItem item = new ListViewItem("アイテム1"); // アイテム名を指定
        // アイテムの色を変更
        item.ForeColor = Color.Red; // テキストの色を赤に設定
        // ListViewにアイテムを追加
        myListView.Items.Add(item); // myListViewはListViewの名前
    }
}

このコードでは、ForeColorプロパティを使用して、アイテムのテキストの色を赤に設定しています。

これにより、視覚的に目立たせることができます。

アイテムのカスタマイズは、ユーザーインターフェースをより魅力的にするために重要です。

ListViewのイベント処理

アイテム選択イベント

ListViewでは、アイテムが選択されたときに発生するイベントを処理することができます。

これにより、ユーザーが選択したアイテムに基づいて特定のアクションを実行できます。

以下のサンプルコードでは、アイテム選択イベントを処理する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // アイテム選択イベントのハンドラを追加
        myListView.ItemSelectionChanged += MyListView_ItemSelectionChanged;
    }
    private void MyListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {
        // 選択されたアイテムの情報を表示
        MessageBox.Show("選択されたアイテム: " + e.Item.Text);
    }
}

このコードでは、ItemSelectionChangedイベントを使用して、選択されたアイテムのテキストをメッセージボックスで表示しています。

ユーザーがアイテムを選択するたびに、このイベントが発生します。

アイテムダブルクリックイベント

ListViewのアイテムをダブルクリックしたときに発生するイベントを処理することもできます。

これにより、アイテムに対して特定のアクションを実行することができます。

以下のサンプルコードでは、アイテムダブルクリックイベントを処理する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // アイテムダブルクリックイベントのハンドラを追加
        myListView.DoubleClick += MyListView_DoubleClick;
    }
    private void MyListView_DoubleClick(object sender, EventArgs e)
    {
        // ダブルクリックされたアイテムの情報を表示
        if (myListView.SelectedItems.Count > 0)
        {
            ListViewItem selectedItem = myListView.SelectedItems[0];
            MessageBox.Show("ダブルクリックされたアイテム: " + selectedItem.Text);
        }
    }
}

このコードでは、DoubleClickイベントを使用して、ダブルクリックされたアイテムのテキストをメッセージボックスで表示しています。

選択されたアイテムがある場合にのみ、情報を表示するようにしています。

アイテムのドラッグ&ドロップ

ListViewでは、アイテムをドラッグ&ドロップする機能を実装することもできます。

これにより、ユーザーがアイテムを別の位置に移動させることができます。

以下のサンプルコードでは、アイテムのドラッグ&ドロップを処理する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ドラッグ&ドロップを有効にする
        myListView.AllowDrop = true;
        // ドラッグ開始イベントのハンドラを追加
        myListView.ItemDrag += MyListView_ItemDrag;
        // ドロップイベントのハンドラを追加
        myListView.DragEnter += MyListView_DragEnter;
        myListView.DragDrop += MyListView_DragDrop;
    }
    private void MyListView_ItemDrag(object sender, ItemDragEventArgs e)
    {
        // ドラッグを開始
        DoDragDrop(e.Item, DragDropEffects.Move);
    }
    private void MyListView_DragEnter(object sender, DragEventArgs e)
    {
        // ドラッグされたアイテムを受け入れる
        if (e.Data.GetDataPresent(typeof(ListViewItem)))
        {
            e.Effect = DragDropEffects.Move;
        }
    }
    private void MyListView_DragDrop(object sender, DragEventArgs e)
    {
        // ドロップされたアイテムを追加
        if (e.Data.GetDataPresent(typeof(ListViewItem)))
        {
            ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
            myListView.Items.Remove(item); // 元の位置からアイテムを削除
            Point pt = myListView.PointToClient(new Point(e.X, e.Y)); // ドロップ位置を取得
            ListViewItem targetItem = myListView.GetItemAt(pt.X, pt.Y); // ドロップ先のアイテムを取得
            if (targetItem != null)
            {
                // ドロップ先のアイテムの前に追加
                myListView.Items.Insert(myListView.Items.IndexOf(targetItem), item);
            }
            else
            {
                // ドロップ先がない場合は末尾に追加
                myListView.Items.Add(item);
            }
        }
    }
}

このコードでは、ListViewにアイテムをドラッグ&ドロップする機能を実装しています。

ItemDragイベントでドラッグを開始し、DragEnterイベントでドラッグされたアイテムを受け入れ、DragDropイベントでアイテムを移動させています。

これにより、ユーザーはListView内でアイテムを自由に移動できるようになります。

ListViewの応用例

チェックボックス付きListView

ListViewにチェックボックスを追加することで、ユーザーが複数のアイテムを選択できるようになります。

チェックボックス付きのListViewを作成するには、CheckBoxesプロパティをtrueに設定します。

以下のサンプルコードでは、チェックボックス付きのListViewを作成する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // チェックボックス付きListViewの設定
        myListView.CheckBoxes = true; // チェックボックスを有効にする
        // アイテムの追加
        myListView.Items.Add(new ListViewItem("アイテム1"));
        myListView.Items.Add(new ListViewItem("アイテム2"));
        myListView.Items.Add(new ListViewItem("アイテム3"));
    }
}

このコードでは、myListViewにチェックボックスを追加し、3つのアイテムを表示しています。

ユーザーは各アイテムのチェックボックスをオンまたはオフにすることができます。

チェックボックスの状態を取得するには、Checkedプロパティを使用します。

アイコン表示のListView

ListViewにアイコンを表示することで、視覚的に情報を伝えることができます。

アイコンを表示するには、ImageListを使用してアイコンを管理し、各アイテムにアイコンを割り当てます。

以下のサンプルコードでは、アイコン表示のListViewを作成する方法を示します。

partial class MyForm : Form
{
    private ImageList imageList; // アイコンを管理するImageList
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ImageListの初期化
        imageList = new ImageList();
        imageList.Images.Add("アイコン1", Image.FromFile("icon1.png")); // アイコン1を追加
        imageList.Images.Add("アイコン2", Image.FromFile("icon2.png")); // アイコン2を追加
        // ListViewにImageListを設定
        myListView.LargeImageList = imageList; // 大きなアイコンを表示
        myListView.View = View.LargeIcon; // 表示スタイルを設定
        // アイテムの追加
        ListViewItem item1 = new ListViewItem("アイテム1", "アイコン1"); // アイコン1を割り当て
        ListViewItem item2 = new ListViewItem("アイテム2", "アイコン2"); // アイコン2を割り当て
        myListView.Items.Add(item1);
        myListView.Items.Add(item2);
    }
}

このコードでは、ImageListを使用してアイコンを管理し、ListViewにアイコンを表示しています。

アイコンは、ListViewItemのコンストラクタで指定することができます。

これにより、アイテムに関連する視覚的な情報を提供できます。

カスタム描画のListView

ListViewのアイテムをカスタム描画することで、独自のスタイルやデザインを適用することができます。

カスタム描画を行うには、DrawItemDrawSubItemDrawColumnHeaderイベントを使用します。

以下のサンプルコードでは、カスタム描画のListViewを作成する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // ListViewの設定
        myListView.View = View.Details; // 詳細表示に設定
        myListView.Columns.Add("アイテム名", 100); // 列の追加
        myListView.Columns.Add("詳細", 100); // 列の追加
        // アイテムの追加
        myListView.Items.Add(new ListViewItem(new[] { "アイテム1", "詳細1" }));
        myListView.Items.Add(new ListViewItem(new[] { "アイテム2", "詳細2" }));
        // カスタム描画を有効にする
        myListView.OwnerDraw = true; // カスタム描画を有効にする
        // イベントハンドラの追加
        myListView.DrawItem += MyListView_DrawItem;
        myListView.DrawSubItem += MyListView_DrawSubItem;
        myListView.DrawColumnHeader += MyListView_DrawColumnHeader;
    }
    private void MyListView_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        // アイテムの描画
        e.DrawDefault = true; // デフォルトの描画を使用
    }
    private void MyListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
    {
        // サブアイテムの描画
        e.DrawBackground(); // 背景を描画
        e.Graphics.DrawString(e.SubItem.Text, e.SubItem.Font, Brushes.Blue, e.Bounds); // テキストを青色で描画
    }
    private void MyListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    {
        // 列ヘッダーの描画
        e.DrawBackground(); // 背景を描画
        e.Graphics.DrawString(e.Header.Text, e.Font, Brushes.Red, e.Bounds); // テキストを赤色で描画
    }
}

このコードでは、ListViewのカスタム描画を実装しています。

OwnerDrawプロパティをtrueに設定し、各描画イベントで独自の描画処理を行っています。

これにより、アイテムやサブアイテム、列ヘッダーのスタイルを自由にカスタマイズできます。

ListViewのパフォーマンス最適化

大量データの表示

ListViewに大量のデータを表示する場合、パフォーマンスが低下することがあります。

これを改善するためには、データの表示方法を工夫する必要があります。

以下のサンプルコードでは、アイテムを一度に追加するのではなく、必要なデータのみを表示する方法を示します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // 大量データの表示
        for (int i = 0; i < 10000; i++)
        {
            myListView.Items.Add(new ListViewItem("アイテム" + i));
        }
    }
}

このコードでは、10000個のアイテムをListViewに追加していますが、パフォーマンスが低下する可能性があります。

これを改善するためには、データをページングして表示するか、ユーザーがスクロールしたときに必要なデータのみを読み込む方法を検討することが重要です。

仮想モードの利用

ListViewの仮想モードを利用することで、大量のデータを効率的に表示できます。

仮想モードでは、ListViewが表示するアイテムを動的に生成し、必要なデータのみをメモリに保持します。

以下のサンプルコードでは、仮想モードを使用してListViewを設定する方法を示します。

partial class MyForm : Form
{
    private int itemCount = 10000; // アイテムの総数
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // 仮想モードの設定
        myListView.VirtualMode = true; // 仮想モードを有効にする
        myListView.VirtualListSize = itemCount; // アイテムの総数を設定
        // アイテムの取得イベントのハンドラを追加
        myListView.RetrieveVirtualItem += MyListView_RetrieveVirtualItem;
    }
    private void MyListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {
        // 仮想アイテムの情報を設定
        e.Item = new ListViewItem("アイテム" + e.ItemIndex); // アイテム名を設定
    }
}

このコードでは、VirtualModeプロパティをtrueに設定し、VirtualListSizeでアイテムの総数を指定しています。

RetrieveVirtualItemイベントで、表示するアイテムの情報を動的に取得しています。

これにより、メモリの使用量を抑えつつ、大量のデータを効率的に表示できます。

メモリ使用量の削減

ListViewのメモリ使用量を削減するためには、不要なアイテムを削除したり、アイテムの管理方法を見直すことが重要です。

以下のサンプルコードでは、ListViewのアイテムを動的に管理し、必要なアイテムのみを表示する方法を示します。

partial class MyForm : Form
{
    private List<ListViewItem> items; // アイテムのリスト
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        // アイテムの初期化
        items = new List<ListViewItem>();
        for (int i = 0; i < 10000; i++)
        {
            items.Add(new ListViewItem("アイテム" + i)); // アイテムをリストに追加
        }
        // ListViewにアイテムを追加
        UpdateListView(0, 100); // 最初の100個のアイテムを表示
    }
    private void UpdateListView(int startIndex, int count)
    {
        myListView.Items.Clear(); // 既存のアイテムをクリア
        for (int i = startIndex; i < startIndex + count && i < items.Count; i++)
        {
            myListView.Items.Add(items[i]); // 新しいアイテムを追加
        }
    }
}

このコードでは、itemsリストにアイテムを保持し、UpdateListViewメソッドで表示するアイテムを動的に管理しています。

これにより、ListViewに表示するアイテムを必要に応じて更新し、メモリの使用量を削減することができます。

特に、大量のデータを扱う場合には、効率的なアイテム管理が重要です。

よくある質問

ListViewにアイテムが表示されないのはなぜ?

ListViewにアイテムが表示されない場合、以下のような原因が考えられます。

  • アイテムの追加が行われていない: Items.Addメソッドを使用してアイテムを追加しているか確認してください。
  • ListViewの表示モードが適切でない: ViewプロパティがView.DetailsView.Listなど、適切な表示モードに設定されているか確認してください。
  • ListViewが非表示またはサイズが0: ListViewがフォーム上で非表示になっている、またはサイズが0になっていないか確認してください。
  • データソースの設定ミス: データバインディングを使用している場合、データソースが正しく設定されているか確認してください。

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

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

  • アイテムのテキストを変更: 既存のアイテムのTextプロパティを変更することで、表示されるテキストを更新できます。

例:myListView.Items[0].Text = "新しいテキスト";

  • サブアイテムの更新: サブアイテムを持つアイテムの場合、SubItemsコレクションを使用してサブアイテムのテキストを変更できます。

例:myListView.Items[0].SubItems[1].Text = "新しいサブアイテム";

  • アイテムの再描画: アイテムの内容を変更した後、ListView.Refresh()メソッドを呼び出すことで、ListViewを再描画し、変更を反映させることができます。

ListViewの選択状態を保持する方法は?

ListViewの選択状態を保持するには、以下の方法を考慮します。

  • 選択状態の保存: フォームの状態を保存する際に、選択されているアイテムのインデックスを保存します。

例:int selectedIndex = myListView.SelectedIndices[0];

  • 選択状態の復元: フォームを再表示する際に、保存したインデックスを使用してアイテムを再選択します。

例:myListView.Items[selectedIndex].Selected = true;

  • 複数選択の管理: 複数のアイテムが選択されている場合、SelectedIndicesコレクションを使用して、すべての選択されたアイテムのインデックスを保存し、復元することができます。

まとめ

この記事では、C#のListViewにアイテムを追加する方法や、イベント処理、応用例、パフォーマンス最適化について詳しく解説しました。

特に、チェックボックス付きのListViewやアイコン表示、カスタム描画の技術を活用することで、ユーザーインターフェースをより魅力的にすることが可能です。

これらの知識を活かして、実際のアプリケーションにListViewを効果的に組み込んでみてください。

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

関連カテゴリーから探す

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