[C#] CheckedListBoxのイベント活用法

C#のCheckedListBoxは、ユーザーが複数の項目を選択できるリストボックスです。

このコントロールのイベントを活用することで、ユーザーの操作に応じた動作を実装できます。

主なイベントには、項目のチェック状態が変わったときに発生するItemCheckがあります。

このイベントを利用して、チェックされた項目の数をカウントしたり、特定の項目が選択されたときに別の処理を実行することが可能です。

また、SelectedIndexChangedイベントを使用して、選択された項目が変わったときに処理を行うこともできます。

これらのイベントを適切に活用することで、ユーザーインターフェースの応答性を向上させ、よりインタラクティブなアプリケーションを構築できます。

この記事でわかること
  • CheckedListBoxの主要なイベントであるItemCheck、SelectedIndexChanged、MouseClick、KeyDownの基本的な使い方と活用法
  • CheckedListBoxの項目を動的に追加・削除する方法と、チェック状態を保存・復元するテクニック
  • フィルタリング機能を実装することで、特定の条件に基づいて項目を表示または非表示にする方法
  • キーボード操作による項目選択やショートカットキーの実装を通じて、ユーザーの操作性を向上させる方法

目次から探す

CheckedListBoxのイベント一覧

C#のWindowsフォームアプリケーションで使用されるCheckedListBoxは、複数の項目をリスト表示し、それぞれにチェックボックスを付けることができるコントロールです。

このコントロールには、ユーザーの操作に応じて様々なイベントが発生します。

ここでは、代表的なイベントについて解説します。

ItemCheckイベント

ItemCheckイベントは、ユーザーが項目のチェック状態を変更したときに発生します。

このイベントを利用することで、チェック状態の変更を検知し、特定の処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
    }
    private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        // チェック状態が変更された項目のインデックスを取得
        int index = e.Index;
        // 新しいチェック状態を取得
        CheckState newState = e.NewValue;
        // 変更された項目の情報を表示
        MessageBox.Show($"項目 {index} のチェック状態が {newState} に変更されました。");
    }
}

このコードでは、CheckedListBox1_ItemCheckメソッドItemCheckイベントにバインドされ、チェック状態が変更されるたびにメッセージボックスで情報を表示します。

SelectedIndexChangedイベント

SelectedIndexChangedイベントは、ユーザーがリスト内の選択項目を変更したときに発生します。

このイベントを利用することで、選択された項目に応じた処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
    }
    private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 現在選択されている項目のインデックスを取得
        int selectedIndex = checkedListBox1.SelectedIndex;
        // 選択された項目の情報を表示
        MessageBox.Show($"選択された項目のインデックス: {selectedIndex}");
    }
}

このコードでは、CheckedListBox1_SelectedIndexChangedメソッドSelectedIndexChangedイベントにバインドされ、選択が変更されるたびにメッセージボックスで情報を表示します。

MouseClickイベント

MouseClickイベントは、ユーザーがマウスで項目をクリックしたときに発生します。

このイベントを利用することで、クリックされた項目に対する特定の処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.MouseClick += CheckedListBox1_MouseClick;
    }
    private void CheckedListBox1_MouseClick(object sender, MouseEventArgs e)
    {
        // クリックされた位置のインデックスを取得
        int index = checkedListBox1.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            // クリックされた項目の情報を表示
            MessageBox.Show($"クリックされた項目のインデックス: {index}");
        }
    }
}

このコードでは、CheckedListBox1_MouseClickメソッドMouseClickイベントにバインドされ、クリックされた項目のインデックスを取得してメッセージボックスで表示します。

KeyDownイベント

KeyDownイベントは、ユーザーがキーボードのキーを押したときに発生します。

このイベントを利用することで、キーボード操作に応じた特定の処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.KeyDown += CheckedListBox1_KeyDown;
    }
    private void CheckedListBox1_KeyDown(object sender, KeyEventArgs e)
    {
        // 押されたキーがEnterキーかどうかを確認
        if (e.KeyCode == Keys.Enter)
        {
            // 現在選択されている項目のインデックスを取得
            int selectedIndex = checkedListBox1.SelectedIndex;
            // Enterキーが押されたことを表示
            MessageBox.Show($"Enterキーが押されました。選択された項目のインデックス: {selectedIndex}");
        }
    }
}

このコードでは、CheckedListBox1_KeyDownメソッドKeyDownイベントにバインドされ、Enterキーが押されたときにメッセージボックスで情報を表示します。

ItemCheckイベントの活用法

ItemCheckイベントは、CheckedListBoxの項目のチェック状態が変更される直前に発生します。

このイベントを活用することで、ユーザーの操作に応じた柔軟な処理を実装することが可能です。

ここでは、ItemCheckイベントの基本的な使い方から、具体的な活用例までを解説します。

イベントの基本的な使い方

ItemCheckイベントは、ItemCheckEventArgsを引数として受け取ります。

この引数を利用することで、チェック状態が変更される項目のインデックスや、新しいチェック状態を取得することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
    }
    private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        // 変更される項目のインデックスを取得
        int index = e.Index;
        // 新しいチェック状態を取得
        CheckState newState = e.NewValue;
        // 変更される項目の情報を表示
        MessageBox.Show($"項目 {index} のチェック状態が {newState} に変更されます。");
    }
}

このコードでは、CheckedListBox1_ItemCheckメソッドItemCheckイベントにバインドされ、チェック状態が変更されるたびにメッセージボックスで情報を表示します。

チェック状態の変更を検知する

ItemCheckイベントを利用することで、チェック状態の変更をリアルタイムで検知し、特定の処理を実行することができます。

例えば、チェックされた項目の内容を別のリストに追加することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
    }
    private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        // 変更される項目のインデックスを取得
        int index = e.Index;
        // 新しいチェック状態を取得
        CheckState newState = e.NewValue;
        // チェックされた場合の処理
        if (newState == CheckState.Checked)
        {
            // チェックされた項目の内容を取得
            string itemText = checkedListBox1.Items[index].ToString();
            // 別のリストに追加
            listBox1.Items.Add(itemText);
        }
    }
}

このコードでは、項目がチェックされたときに、その項目の内容をlistBox1に追加します。

チェックされた項目の数をカウントする

ItemCheckイベントを利用して、チェックされた項目の数をカウントすることも可能です。

これにより、チェックされた項目の数に応じた処理を実装することができます。

public partial class MyForm : Form
{
    private int checkedItemCount = 0; // チェックされた項目の数を保持
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
    }
    private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        // 新しいチェック状態を取得
        CheckState newState = e.NewValue;
        // チェック状態に応じてカウントを更新
        if (newState == CheckState.Checked)
        {
            checkedItemCount++;
        }
        else if (newState == CheckState.Unchecked)
        {
            checkedItemCount--;
        }
        // チェックされた項目の数を表示
        label1.Text = $"チェックされた項目の数: {checkedItemCount}";
    }
}

このコードでは、checkedItemCount変数を用いて、チェックされた項目の数をカウントし、label1に表示します。

これにより、ユーザーは現在チェックされている項目の数をリアルタイムで確認することができます。

SelectedIndexChangedイベントの活用法

SelectedIndexChangedイベントは、CheckedListBox内で選択されている項目が変更されたときに発生します。

このイベントを活用することで、ユーザーの選択に応じた動的な処理を実装することが可能です。

ここでは、SelectedIndexChangedイベントの基本的な使い方から、具体的な活用例までを解説します。

イベントの基本的な使い方

SelectedIndexChangedイベントは、選択された項目のインデックスを取得するために使用されます。

このインデックスを利用して、選択された項目に関連する処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
    }
    private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 現在選択されている項目のインデックスを取得
        int selectedIndex = checkedListBox1.SelectedIndex;
        // 選択された項目の情報を表示
        MessageBox.Show($"選択された項目のインデックス: {selectedIndex}");
    }
}

このコードでは、CheckedListBox1_SelectedIndexChangedメソッドSelectedIndexChangedイベントにバインドされ、選択が変更されるたびにメッセージボックスで情報を表示します。

選択された項目に応じた処理の実装

SelectedIndexChangedイベントを利用することで、選択された項目に応じた特定の処理を実装することができます。

例えば、選択された項目の内容をラベルに表示することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
    }
    private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 現在選択されている項目のインデックスを取得
        int selectedIndex = checkedListBox1.SelectedIndex;
        if (selectedIndex != -1)
        {
            // 選択された項目の内容を取得
            string selectedItem = checkedListBox1.Items[selectedIndex].ToString();
            // ラベルに選択された項目の内容を表示
            label1.Text = $"選択された項目: {selectedItem}";
        }
    }
}

このコードでは、選択された項目の内容をlabel1に表示します。

これにより、ユーザーは現在選択されている項目の内容を確認することができます。

複数選択時の注意点

CheckedListBoxは通常、単一選択をサポートしていますが、複数選択をサポートする場合もあります。

その際、SelectedIndexChangedイベントは、選択が変更されるたびに発生するため、複数の項目が選択されている場合には注意が必要です。

複数選択をサポートする場合、選択されたすべての項目を処理するためには、SelectedIndicesプロパティを使用して、選択されているすべてのインデックスを取得する必要があります。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.SelectionMode = SelectionMode.MultiExtended; // 複数選択を許可
        checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
    }
    private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 選択されているすべてのインデックスを取得
        var selectedIndices = checkedListBox1.SelectedIndices;
        // 選択された項目の内容をリストに表示
        listBox1.Items.Clear();
        foreach (int index in selectedIndices)
        {
            listBox1.Items.Add(checkedListBox1.Items[index].ToString());
        }
    }
}

このコードでは、SelectionModeMultiExtendedに設定し、複数選択を許可しています。

選択されたすべての項目の内容をlistBox1に表示することで、ユーザーは現在選択されているすべての項目を確認することができます。

MouseClickイベントの活用法

MouseClickイベントは、CheckedListBox内の項目がマウスでクリックされたときに発生します。

このイベントを活用することで、ユーザーのクリック操作に応じた処理を実装することが可能です。

ここでは、MouseClickイベントの基本的な使い方から、具体的な活用例までを解説します。

イベントの基本的な使い方

MouseClickイベントは、MouseEventArgsを引数として受け取ります。

この引数を利用することで、クリックされた位置の情報を取得し、クリックされた項目に関連する処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.MouseClick += CheckedListBox1_MouseClick;
    }
    private void CheckedListBox1_MouseClick(object sender, MouseEventArgs e)
    {
        // クリックされた位置のインデックスを取得
        int index = checkedListBox1.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            // クリックされた項目の情報を表示
            MessageBox.Show($"クリックされた項目のインデックス: {index}");
        }
    }
}

このコードでは、CheckedListBox1_MouseClickメソッドMouseClickイベントにバインドされ、クリックされた項目のインデックスを取得してメッセージボックスで表示します。

クリックされた項目の情報取得

MouseClickイベントを利用することで、クリックされた項目の詳細情報を取得し、特定の処理を実行することができます。

例えば、クリックされた項目の内容をラベルに表示することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.MouseClick += CheckedListBox1_MouseClick;
    }
    private void CheckedListBox1_MouseClick(object sender, MouseEventArgs e)
    {
        // クリックされた位置のインデックスを取得
        int index = checkedListBox1.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            // クリックされた項目の内容を取得
            string itemText = checkedListBox1.Items[index].ToString();
            // ラベルにクリックされた項目の内容を表示
            label1.Text = $"クリックされた項目: {itemText}";
        }
    }
}

このコードでは、クリックされた項目の内容をlabel1に表示します。

これにより、ユーザーはクリックした項目の内容を確認することができます。

ダブルクリック時の特別な処理

MouseClickイベントはシングルクリックに対応していますが、ダブルクリック時の特別な処理を実装することも可能です。

ダブルクリックを検出するためには、MouseDoubleClickイベントを使用します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.MouseDoubleClick += CheckedListBox1_MouseDoubleClick;
    }
    private void CheckedListBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        // ダブルクリックされた位置のインデックスを取得
        int index = checkedListBox1.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            // ダブルクリックされた項目の内容を取得
            string itemText = checkedListBox1.Items[index].ToString();
            // ダブルクリックされた項目の内容を特別な処理として表示
            MessageBox.Show($"ダブルクリックされた項目: {itemText}");
        }
    }
}

このコードでは、MouseDoubleClickイベントを使用して、ダブルクリックされた項目の内容をメッセージボックスで表示します。

これにより、ユーザーはダブルクリックした項目に対する特別な処理を確認することができます。

KeyDownイベントの活用法

KeyDownイベントは、CheckedListBox内でキーボードのキーが押されたときに発生します。

このイベントを活用することで、キーボード操作に応じた処理を実装することが可能です。

ここでは、KeyDownイベントの基本的な使い方から、具体的な活用例までを解説します。

イベントの基本的な使い方

KeyDownイベントは、KeyEventArgsを引数として受け取ります。

この引数を利用することで、押されたキーの情報を取得し、特定のキーに応じた処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.KeyDown += CheckedListBox1_KeyDown;
    }
    private void CheckedListBox1_KeyDown(object sender, KeyEventArgs e)
    {
        // 押されたキーの情報を表示
        MessageBox.Show($"押されたキー: {e.KeyCode}");
    }
}

このコードでは、CheckedListBox1_KeyDownメソッドKeyDownイベントにバインドされ、キーが押されるたびにメッセージボックスで情報を表示します。

キーボード操作による項目選択

KeyDownイベントを利用することで、キーボード操作による項目選択を実装することができます。

例えば、矢印キーを使用して項目を移動し、Enterキーで選択を確定することができます。

using System.Windows.Forms;

public partial class MyForm : Form
{
	public MyForm()
	{
		InitializeComponent();
		checkedListBox1.KeyDown += CheckedListBox1_KeyDown;
	}
	private void CheckedListBox1_KeyDown(object sender, KeyEventArgs e)
	{
		// 上矢印キーが押された場合
		if (e.KeyCode == Keys.Up)
		{
			// 現在選択されている項目のインデックスを取得
			int currentIndex = checkedListBox1.SelectedIndex;
			// インデックスを1つ多く上に移動
			if (currentIndex > 0)
			{
				checkedListBox1.SelectedIndex = currentIndex - 1;
			}
		}
		// 下矢印キーが押された場合
		else if (e.KeyCode == Keys.Down)
		{
			// 現在選択されている項目のインデックスを取得
			int currentIndex = checkedListBox1.SelectedIndex;
			// インデックスを1つ多く下に移動
			if (currentIndex < checkedListBox1.Items.Count - 1)
			{
				checkedListBox1.SelectedIndex = currentIndex + 1;
			}
		}
		// Enterキーが押された場合
		else if (e.KeyCode == Keys.Enter)
		{
			// 現在選択されている項目のインデックスを取得
			int selectedIndex = checkedListBox1.SelectedIndex;
			if (selectedIndex != -1)
			{
				// 選択された項目の内容を表示
				MessageBox.Show($"選択された項目: {checkedListBox1.Items[selectedIndex]}");
			}
		}
	}
}

このコードでは、矢印キーで項目を移動し、Enterキーで選択された項目の内容をメッセージボックスで表示します。

ショートカットキーの実装

KeyDownイベントを利用することで、特定のショートカットキーを実装することができます。

例えば、Ctrlキーと特定のキーを組み合わせて特別な処理を実行することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        checkedListBox1.KeyDown += CheckedListBox1_KeyDown;
    }
    private void CheckedListBox1_KeyDown(object sender, KeyEventArgs e)
    {
        // Ctrl + Aが押された場合
        if (e.Control && e.KeyCode == Keys.A)
        {
            // すべての項目を選択
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                checkedListBox1.SetItemChecked(i, true);
            }
            MessageBox.Show("すべての項目が選択されました。");
        }
    }
}

このコードでは、CtrlキーとAキーが同時に押された場合に、CheckedListBox内のすべての項目を選択する処理を実装しています。

これにより、ユーザーはショートカットキーを使用して効率的に操作を行うことができます。

CheckedListBoxの応用例

CheckedListBoxは、基本的なリスト表示機能に加えて、さまざまな応用が可能です。

ここでは、CheckedListBoxを活用したいくつかの応用例を紹介します。

項目の動的追加と削除

CheckedListBoxに項目を動的に追加したり削除したりすることで、ユーザーの操作に応じた柔軟なリスト管理が可能です。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        // ボタンのクリックイベントにメソッドをバインド
        addButton.Click += AddButton_Click;
        removeButton.Click += RemoveButton_Click;
    }
    private void AddButton_Click(object sender, EventArgs e)
    {
        // テキストボックスの内容を新しい項目として追加
        string newItem = textBox1.Text;
        if (!string.IsNullOrEmpty(newItem))
        {
            checkedListBox1.Items.Add(newItem);
            textBox1.Clear();
        }
    }
    private void RemoveButton_Click(object sender, EventArgs e)
    {
        // 選択されている項目を削除
        int selectedIndex = checkedListBox1.SelectedIndex;
        if (selectedIndex != -1)
        {
            checkedListBox1.Items.RemoveAt(selectedIndex);
        }
    }
}

このコードでは、addButtonをクリックすると、textBox1の内容がCheckedListBoxに追加され、removeButtonをクリックすると、選択されている項目が削除されます。

チェック状態の保存と復元

CheckedListBoxのチェック状態を保存し、後で復元することで、ユーザーの選択を保持することができます。

public partial class MyForm : Form
{
    private List<bool> checkedStates = new List<bool>();
    public MyForm()
    {
        InitializeComponent();
        saveButton.Click += SaveButton_Click;
        loadButton.Click += LoadButton_Click;
    }
    private void SaveButton_Click(object sender, EventArgs e)
    {
        // 現在のチェック状態を保存
        checkedStates.Clear();
        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {
            checkedStates.Add(checkedListBox1.GetItemChecked(i));
        }
        MessageBox.Show("チェック状態が保存されました。");
    }
    private void LoadButton_Click(object sender, EventArgs e)
    {
        // 保存されたチェック状態を復元
        for (int i = 0; i < checkedStates.Count; i++)
        {
            checkedListBox1.SetItemChecked(i, checkedStates[i]);
        }
        MessageBox.Show("チェック状態が復元されました。");
    }
}

このコードでは、saveButtonをクリックすると、現在のチェック状態がcheckedStatesリストに保存され、loadButtonをクリックすると、保存されたチェック状態が復元されます。

フィルタリング機能の実装

CheckedListBoxにフィルタリング機能を追加することで、特定の条件に基づいて項目を表示または非表示にすることができます。

public partial class MyForm : Form
{
    private List<string> allItems = new List<string>();
    public MyForm()
    {
        InitializeComponent();
        filterButton.Click += FilterButton_Click;
        // 初期項目を追加
        allItems.AddRange(new string[] { "Apple", "Banana", "Cherry", "Date", "Elderberry" });
        checkedListBox1.Items.AddRange(allItems.ToArray());
    }
    private void FilterButton_Click(object sender, EventArgs e)
    {
        // フィルタ条件に基づいて項目を表示
        string filterText = textBox1.Text.ToLower();
        checkedListBox1.Items.Clear();
        foreach (var item in allItems)
        {
            if (item.ToLower().Contains(filterText))
            {
                checkedListBox1.Items.Add(item);
            }
        }
    }
}

このコードでは、filterButtonをクリックすると、textBox1の内容に基づいてCheckedListBoxの項目がフィルタリングされます。

フィルタ条件に一致する項目のみが表示されます。

よくある質問

CheckedListBoxの項目をプログラムでチェックするには?

CheckedListBoxの項目をプログラムでチェックするには、SetItemCheckedメソッドを使用します。

このメソッドは、指定したインデックスの項目をチェックまたはアンチェックすることができます。

例:checkedListBox1.SetItemChecked(0, true);

このコードは、CheckedListBoxの最初の項目をチェックします。

CheckedListBoxの選択状態をクリアする方法は?

CheckedListBoxの選択状態をクリアするには、ClearSelectedメソッドを使用します。

このメソッドは、現在選択されているすべての項目の選択状態を解除します。

例:checkedListBox1.ClearSelected();

このコードは、CheckedListBox内のすべての選択状態をクリアします。

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

CheckedListBoxのパフォーマンスを向上させるためには、以下の点に注意することが重要です。

  • 項目の追加や削除を一括で行う:大量の項目を追加または削除する場合、BeginUpdateEndUpdateメソッドを使用して、描画の更新を一時停止することでパフォーマンスを向上させることができます。
  • 不要なイベントの抑制:項目の追加や削除時に不要なイベントが発生しないように、イベントハンドラを一時的に解除することを検討してください。
  • データバインディングの活用:データバインディングを使用して、データソースから直接項目を管理することで、効率的なデータ操作が可能になります。

これらの方法を組み合わせることで、CheckedListBoxのパフォーマンスを効果的に向上させることができます。

まとめ

この記事では、C#のCheckedListBoxコントロールに関連するさまざまなイベントの活用法について詳しく解説しました。

ItemCheckSelectedIndexChangedMouseClickKeyDownといったイベントを通じて、ユーザーの操作に応じた柔軟な処理を実装する方法を学びました。

これらの知識を活用して、よりインタラクティブでユーザーフレンドリーなアプリケーションを開発してみてください。

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

関連カテゴリーから探す

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