[C#] ListViewでのチェックボックスの実装方法

C#のListViewでチェックボックスを実装するには、まずListViewコントロールのCheckBoxesプロパティをtrueに設定します。

これにより、各項目の左側にチェックボックスが表示されます。

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

例えば、特定の項目がチェックされているか確認するにはitem.Checkedを参照し、チェック状態を変更するにはitem.Checked = trueのように設定します。

イベントハンドラを使用して、チェック状態の変更を監視することも可能です。

この記事でわかること
  • C#でのListViewの基本的な使い方
  • チェックボックスの有効化方法
  • チェック状態の取得と設定方法
  • チェックボックスのカスタマイズ手法
  • データ処理におけるチェックボックスの活用

目次から探す

チェックボックスの有効化

CheckBoxesプロパティの設定

C#のListViewコントロールでチェックボックスを有効にするには、CheckBoxesプロパティをtrueに設定する必要があります。

これにより、各アイテムにチェックボックスが表示されるようになります。

以下は、MyFormクラス内での設定例です。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
    }
}

このコードを実行すると、listView1にチェックボックスが表示されるようになります。

チェックボックスの表示確認

チェックボックスが正しく表示されているか確認するためには、ListViewにいくつかのアイテムを追加する必要があります。

以下のコードでは、サンプルアイテムを追加しています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
    }
    private void AddSampleItems()
    {
        listView1.Items.Add("アイテム1"); // アイテム1を追加
        listView1.Items.Add("アイテム2"); // アイテム2を追加
        listView1.Items.Add("アイテム3"); // アイテム3を追加
    }
}

このコードを実行すると、listView1に3つのアイテムが追加され、それぞれにチェックボックスが表示されます。

ユーザーはこれらのチェックボックスを操作できるようになります。

チェックボックスの操作

チェック状態の取得

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

以下のコードでは、チェックボックスの状態を取得し、チェックされているアイテムの数をカウントしています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
    }
    private void CountCheckedItems()
    {
        int checkedCount = 0; // チェックされたアイテムのカウント
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Checked) // チェックされているか確認
            {
                checkedCount++; // カウントを増やす
            }
        }
        MessageBox.Show($"チェックされたアイテムの数: {checkedCount}"); // 結果を表示
    }
}

このコードを実行すると、チェックされたアイテムの数がメッセージボックスで表示されます。

チェック状態の設定

ListViewのアイテムのチェック状態をプログラムから設定することも可能です。

以下のコードでは、特定のアイテムをチェックする方法を示しています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        SetItemChecked(1); // 2番目のアイテムをチェック
    }
    private void SetItemChecked(int index)
    {
        if (index >= 0 && index < listView1.Items.Count) // インデックスの範囲を確認
        {
            listView1.Items[index].Checked = true; // チェック状態を設定
        }
    }
}

このコードを実行すると、2番目のアイテムが自動的にチェックされます。

チェック状態の変更イベント

チェックボックスの状態が変更されたときにイベントを処理するには、ItemCheckedイベントを使用します。

以下のコードでは、チェック状態が変更されたときにメッセージボックスを表示します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        listView1.ItemChecked += ListView1_ItemChecked; // イベントハンドラを追加
    }
    private void ListView1_ItemChecked(object sender, ItemCheckedEventArgs e)
    {
        MessageBox.Show($"{e.Item.Text} のチェック状態が変更されました。"); // 状態変更を通知
    }
}

このコードを実行すると、チェックボックスの状態が変更されるたびに、変更されたアイテムの名前が表示されるメッセージボックスが表示されます。

チェックボックスの応用

複数選択の実装

ListViewのチェックボックスを使用して、複数のアイテムを選択する機能を実装することができます。

以下のコードでは、ユーザーがチェックしたアイテムをリストに追加し、ボタンをクリックすることで選択されたアイテムを表示します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        buttonShowSelected.Click += ButtonShowSelected_Click; // ボタンクリックイベントを追加
    }
    private void ButtonShowSelected_Click(object sender, EventArgs e)
    {
        List<string> selectedItems = new List<string>(); // 選択されたアイテムを格納するリスト
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Checked) // チェックされているか確認
            {
                selectedItems.Add(item.Text); // 選択されたアイテムを追加
            }
        }
        MessageBox.Show("選択されたアイテム: " + string.Join(", ", selectedItems)); // 結果を表示
    }
}

このコードを実行すると、チェックされたアイテムの名前がメッセージボックスに表示されます。

チェック状態に基づく処理

チェックボックスの状態に基づいて特定の処理を実行することも可能です。

以下のコードでは、チェックされたアイテムの合計を計算する例を示します。

各アイテムには数値が設定されており、チェックされたアイテムの合計を計算します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        buttonCalculateSum.Click += ButtonCalculateSum_Click; // ボタンクリックイベントを追加
    }
    private void AddSampleItems()
    {
        listView1.Items.Add(new ListViewItem(new[] { "アイテム1", "100" })); // アイテム1
        listView1.Items.Add(new ListViewItem(new[] { "アイテム2", "200" })); // アイテム2
        listView1.Items.Add(new ListViewItem(new[] { "アイテム3", "300" })); // アイテム3
    }
    private void ButtonCalculateSum_Click(object sender, EventArgs e)
    {
        int totalSum = 0; // 合計値
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Checked) // チェックされているか確認
            {
                totalSum += int.Parse(item.SubItems[1].Text); // 数値を合計
            }
        }
        MessageBox.Show($"チェックされたアイテムの合計: {totalSum}"); // 結果を表示
    }
}

このコードを実行すると、チェックされたアイテムの数値の合計がメッセージボックスに表示されます。

チェックボックスのカスタマイズ

ListViewのチェックボックスは、デフォルトのスタイルを変更することができます。

例えば、チェックボックスのサイズや色を変更することが可能です。

以下のコードでは、カスタム描画を使用してチェックボックスの色を変更する方法を示します。

using System.Drawing;
using System.Windows.Forms;

public partial class MyForm : Form
{
	public MyForm()
	{
		InitializeComponent(); // フォームの初期化
		listView1.CheckBoxes = true; // チェックボックスを有効化
		AddSampleItems(); // サンプルアイテムを追加
		listView1.OwnerDraw = true; // カスタム描画を有効化
		listView1.DrawItem += ListView1_DrawItem; // 描画イベントを追加
	}
	private void AddSampleItems()
	{
		listView1.Items.Add(new ListViewItem(new[] { "アイテム1", "100" })); // アイテム1
		listView1.Items.Add(new ListViewItem(new[] { "アイテム2", "200" })); // アイテム2
		listView1.Items.Add(new ListViewItem(new[] { "アイテム3", "300" })); // アイテム3
	}
	private void ListView1_DrawItem(object sender, DrawListViewItemEventArgs e)
	{
		e.DrawDefault = false; // デフォルトの描画を無効化
		e.Graphics.FillRectangle(Brushes.White, e.Bounds); // 背景を白で塗りつぶす
		e.DrawFocusRectangle(); // フォーカスの矩形を描画
								// チェックボックスの描画
		CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(e.Bounds.Left, e.Bounds.Top),
			e.Item.Checked ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal :
			System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
		// アイテムのテキストを描画
		e.Graphics.DrawString(e.Item.Text, e.Item.Font, Brushes.Black, e.Bounds.Left + 20, e.Bounds.Top);
	}
}

このコードを実行すると、ListViewのアイテムにカスタムスタイルのチェックボックスが表示されます。

チェックボックスの色やサイズを変更することで、より魅力的なUIを作成することができます。

実装例

基本的なチェックボックス付きListViewの実装

基本的なチェックボックス付きListViewを実装するには、まずListViewをフォームに追加し、CheckBoxesプロパティをtrueに設定します。

以下のコードは、基本的なチェックボックス付きListViewの実装例です。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
    }
    private void AddSampleItems()
    {
        listView1.Items.Add("アイテム1"); // アイテム1を追加
        listView1.Items.Add("アイテム2"); // アイテム2を追加
        listView1.Items.Add("アイテム3"); // アイテム3を追加
    }
}

このコードを実行すると、3つのアイテムが表示され、それぞれにチェックボックスが付いています。

ユーザーはこれらのチェックボックスを操作できます。

チェックボックスの状態に応じたデータ処理

チェックボックスの状態に基づいてデータ処理を行う例を示します。

以下のコードでは、チェックされたアイテムの名前をリストに追加し、ボタンをクリックすることで表示します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        buttonProcess.Click += ButtonProcess_Click; // ボタンクリックイベントを追加
    }
    private void ButtonProcess_Click(object sender, EventArgs e)
    {
        List<string> selectedItems = new List<string>(); // 選択されたアイテムを格納するリスト
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Checked) // チェックされているか確認
            {
                selectedItems.Add(item.Text); // 選択されたアイテムを追加
            }
        }
        MessageBox.Show("選択されたアイテム: " + string.Join(", ", selectedItems)); // 結果を表示
    }
}

このコードを実行すると、チェックされたアイテムの名前がメッセージボックスに表示されます。

チェックボックスの状態を保存・復元する方法

チェックボックスの状態を保存し、アプリケーションを再起動した際に復元する方法を示します。

以下のコードでは、チェックボックスの状態をファイルに保存し、アプリケーション起動時に復元します。

public partial class MyForm : Form
{
    private const string FilePath = "checkbox_states.txt"; // 状態を保存するファイルパス
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        listView1.CheckBoxes = true; // チェックボックスを有効化
        AddSampleItems(); // サンプルアイテムを追加
        LoadCheckBoxStates(); // チェックボックスの状態を読み込む
        this.FormClosing += MyForm_FormClosing; // フォームが閉じるときに状態を保存
    }
    private void AddSampleItems()
    {
        listView1.Items.Add("アイテム1"); // アイテム1を追加
        listView1.Items.Add("アイテム2"); // アイテム2を追加
        listView1.Items.Add("アイテム3"); // アイテム3を追加
    }
    private void LoadCheckBoxStates()
    {
        if (File.Exists(FilePath)) // ファイルが存在するか確認
        {
            string[] states = File.ReadAllLines(FilePath); // ファイルから状態を読み込む
            for (int i = 0; i < states.Length && i < listView1.Items.Count; i++)
            {
                listView1.Items[i].Checked = bool.Parse(states[i]); // チェック状態を復元
            }
        }
    }
    private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        SaveCheckBoxStates(); // チェックボックスの状態を保存
    }
    private void SaveCheckBoxStates()
    {
        List<string> states = new List<string>(); // 状態を格納するリスト
        foreach (ListViewItem item in listView1.Items)
        {
            states.Add(item.Checked.ToString()); // チェック状態を追加
        }
        File.WriteAllLines(FilePath, states); // ファイルに書き込む
    }
}

このコードを実行すると、チェックボックスの状態がcheckbox_states.txtというファイルに保存され、アプリケーションを再起動するとその状態が復元されます。

これにより、ユーザーは前回の状態を保持することができます。

よくある質問

チェックボックスが表示されないのはなぜ?

チェックボックスが表示されない場合、以下の点を確認してください。

  • CheckBoxesプロパティの設定: ListViewのCheckBoxesプロパティがtrueに設定されているか確認します。
  • アイテムの追加: ListViewにアイテムが追加されているか確認します。

アイテムがないとチェックボックスも表示されません。

  • OwnerDrawプロパティ: ListViewのOwnerDrawプロパティがtrueに設定されている場合、デフォルトの描画が無効化されるため、チェックボックスが表示されないことがあります。

この場合、カスタム描画を行う必要があります。

チェック状態をプログラムで変更するには?

チェック状態をプログラムで変更するには、ListViewのアイテムのCheckedプロパティを使用します。

以下のように、特定のアイテムのチェック状態を設定できます。

例:listView1.Items[index].Checked = true;

このコードを実行すると、指定したインデックスのアイテムがチェックされます。

チェックボックスのデザインを変更できますか?

チェックボックスのデザインは、カスタム描画を使用することで変更できます。

OwnerDrawプロパティをtrueに設定し、DrawItemイベントを処理することで、チェックボックスの色やサイズを変更することが可能です。

  • CheckBoxRenderer: CheckBoxRendererクラスを使用して、チェックボックスの状態に応じた描画を行うことができます。
  • Graphicsオブジェクト: Graphicsオブジェクトを使用して、チェックボックスの背景やテキストのスタイルをカスタマイズできます。

このようにして、独自のデザインを持つチェックボックスを実装することができます。

まとめ

この記事では、C#のListViewにおけるチェックボックスの実装方法について詳しく解説しました。

基本的なチェックボックスの設定から、チェック状態の取得や変更、さらには応用的な使い方やデータ処理の方法まで幅広く取り上げました。

これを機に、実際のアプリケーションにチェックボックス機能を取り入れて、ユーザーインターフェースをより使いやすくすることに挑戦してみてください。

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