[C#] CheckedListBoxから選択された項目を取得する方法
C#でCheckedListBoxから選択された項目を取得するには、CheckedListBoxコントロールのCheckedItems
プロパティを使用します。
このプロパティは、チェックされている項目のコレクションを返します。
例えば、foreach
ループを使ってCheckedItems
を反復処理し、各項目を取得することができます。
また、CheckedIndices
プロパティを使用すると、チェックされている項目のインデックスを取得できます。
これにより、選択された項目のインデックスを基に、元のリストから項目を参照することも可能です。
これらのプロパティを活用することで、ユーザーが選択した項目を簡単に取得し、処理することができます。
CheckedListBoxの項目を取得する方法
C#のWindowsフォームアプリケーションで、CheckedListBoxコントロールを使用する際、ユーザーがチェックした項目を取得する方法は非常に重要です。
ここでは、CheckedItemsプロパティ、CheckedIndicesプロパティ、そしてSelectedItemsプロパティとの違いについて詳しく解説します。
CheckedItemsプロパティの使用
CheckedItemsプロパティは、CheckedListBox内でチェックされている項目を取得するために使用します。
このプロパティは、チェックされた項目のコレクションを返します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("項目1");
checkedListBox1.Items.Add("項目2");
checkedListBox1.Items.Add("項目3");
}
private void ShowCheckedItems()
{
// チェックされた項目を取得
foreach (var item in checkedListBox1.CheckedItems)
{
Console.WriteLine(item.ToString()); // 項目名を表示
}
}
}

この例では、CheckedListBoxに3つの項目を追加し、チェックされた項目をコンソールに出力しています。
CheckedIndicesプロパティの使用
CheckedIndicesプロパティは、CheckedListBox内でチェックされている項目のインデックスを取得するために使用します。
このプロパティは、チェックされた項目のインデックスのコレクションを返します。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("項目1");
checkedListBox1.Items.Add("項目2");
checkedListBox1.Items.Add("項目3");
}
private void ShowCheckedIndices()
{
// チェックされた項目のインデックスを取得
foreach (int index in checkedListBox1.CheckedIndices)
{
Console.WriteLine(index); // インデックスを表示
}
}
}
0
2
この例では、CheckedListBoxに3つの項目を追加し、チェックされた項目のインデックスをコンソールに出力しています。
SelectedItemsプロパティとの違い
CheckedItemsプロパティとSelectedItemsプロパティは、似ているようで異なる目的を持っています。
以下の表でその違いを確認しましょう。
プロパティ名 | 説明 |
---|---|
CheckedItems | チェックされた項目のコレクションを返す |
SelectedItems | 選択された項目のコレクションを返す(チェック状態とは無関係) |
CheckedItemsプロパティは、ユーザーがチェックした項目を取得するために使用されますが、SelectedItemsプロパティは、ユーザーが選択した項目を取得するために使用されます。
CheckedListBoxでは、項目が選択されているかどうかと、チェックされているかどうかは別の状態として扱われます。
CheckedListBoxのイベント
CheckedListBoxコントロールは、ユーザーの操作に応じてさまざまなイベントを発生させます。
これらのイベントを活用することで、ユーザーの操作に応じた動的な処理を実装することができます。
ここでは、特に重要なItemCheckイベントとSelectedIndexChangedイベントについて解説します。
ItemCheckイベントの活用
ItemCheckイベントは、ユーザーが項目のチェック状態を変更したときに発生します。
このイベントを利用することで、チェック状態の変更に応じた処理を実装することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("項目1");
checkedListBox1.Items.Add("項目2");
checkedListBox1.Items.Add("項目3");
// ItemCheckイベントのハンドラを追加
checkedListBox1.ItemCheck += CheckedListBox1_ItemCheck;
}
private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
// チェック状態が変更された項目のインデックスと新しい状態を表示
Console.WriteLine($"インデックス: {e.Index}, 新しい状態: {e.NewValue}");
}
}
インデックス: 0, 新しい状態: Checked
インデックス: 1, 新しい状態: Unchecked
この例では、ユーザーが項目のチェック状態を変更するたびに、そのインデックスと新しい状態をコンソールに出力しています。
SelectedIndexChangedイベントの活用
SelectedIndexChangedイベントは、ユーザーが選択した項目を変更したときに発生します。
このイベントを利用することで、選択状態の変更に応じた処理を実装することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("項目1");
checkedListBox1.Items.Add("項目2");
checkedListBox1.Items.Add("項目3");
// SelectedIndexChangedイベントのハンドラを追加
checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
}
private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 選択された項目のインデックスを表示
Console.WriteLine($"選択されたインデックス: {checkedListBox1.SelectedIndex}");
}
}
選択されたインデックス: 1
選択されたインデックス: 2
この例では、ユーザーが項目を選択するたびに、そのインデックスをコンソールに出力しています。
ItemCheckイベントとSelectedIndexChangedイベントを活用することで、ユーザーの操作に応じた柔軟なインターフェースを構築することが可能です。
これにより、アプリケーションのユーザーエクスペリエンスを向上させることができます。
実装例
ここでは、CheckedListBoxを使用した具体的な実装例を紹介します。
CheckedListBoxの初期化から、チェックされた項目の取得と表示、さらにチェックされた項目に対する処理を行う方法について解説します。
CheckedListBoxの初期化
CheckedListBoxを使用するためには、まずフォームにCheckedListBoxコントロールを追加し、項目を初期化する必要があります。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("りんご");
checkedListBox1.Items.Add("バナナ");
checkedListBox1.Items.Add("オレンジ");
}
}
このコードでは、CheckedListBoxに3つの果物の名前を項目として追加しています。
これにより、ユーザーはこれらの項目をチェックすることができます。
チェックされた項目の取得と表示
ユーザーがチェックした項目を取得し、それを表示する方法を見てみましょう。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("りんご");
checkedListBox1.Items.Add("バナナ");
checkedListBox1.Items.Add("オレンジ");
}
private void ShowCheckedItems()
{
// チェックされた項目を取得して表示
foreach (var item in checkedListBox1.CheckedItems)
{
Console.WriteLine($"チェックされた項目: {item}");
}
}
}
チェックされた項目: りんご
チェックされた項目: オレンジ
この例では、チェックされた項目をコンソールに出力しています。
ユーザーが「りんご」と「オレンジ」をチェックした場合、その項目名が表示されます。
チェックされた項目の処理
チェックされた項目に対して、特定の処理を行うことも可能です。
例えば、チェックされた項目をリストから削除する処理を実装してみましょう。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("りんご");
checkedListBox1.Items.Add("バナナ");
checkedListBox1.Items.Add("オレンジ");
}
private void RemoveCheckedItems()
{
// チェックされた項目を削除
for (int i = checkedListBox1.CheckedItems.Count - 1; i >= 0; i--)
{
checkedListBox1.Items.Remove(checkedListBox1.CheckedItems[i]);
}
}
}
このコードでは、チェックされた項目をリストから削除しています。
ループを逆順に回すことで、インデックスのずれを防ぎつつ安全に項目を削除しています。
これらの実装例を通じて、CheckedListBoxの基本的な使い方と、チェックされた項目に対する処理の方法を理解することができます。
これを基に、さらに複雑な処理を実装することも可能です。
応用例
CheckedListBoxは、基本的な使用法に加えて、さまざまな応用が可能です。
ここでは、複数のCheckedListBoxを連携させる方法、データバインディングを使用したCheckedListBoxの実装、そしてチェック状態の保存と復元について解説します。
複数のCheckedListBoxを連携させる
複数のCheckedListBoxを連携させることで、ユーザーの選択に応じた動的なインターフェースを構築することができます。
例えば、1つのCheckedListBoxで選択された項目に応じて、別のCheckedListBoxの項目を変更することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// 第一のCheckedListBoxの項目を追加
checkedListBox1.Items.Add("フルーツ");
checkedListBox1.Items.Add("野菜");
// イベントハンドラを追加
checkedListBox1.SelectedIndexChanged += CheckedListBox1_SelectedIndexChanged;
}
private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// 第二のCheckedListBoxの項目をクリア
checkedListBox2.Items.Clear();
// 選択された項目に応じて第二のCheckedListBoxに項目を追加
if (checkedListBox1.SelectedItem.ToString() == "フルーツ")
{
checkedListBox2.Items.Add("りんご");
checkedListBox2.Items.Add("バナナ");
}
else if (checkedListBox1.SelectedItem.ToString() == "野菜")
{
checkedListBox2.Items.Add("にんじん");
checkedListBox2.Items.Add("トマト");
}
}
}
この例では、最初のCheckedListBoxで「フルーツ」または「野菜」を選択すると、2つ目のCheckedListBoxにそれぞれのカテゴリに応じた項目が表示されます。
データバインディングを使用したCheckedListBox
データバインディングを使用することで、CheckedListBoxにデータソースを直接バインドし、項目を動的に管理することができます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// データソースを作成
var fruits = new List<string> { "りんご", "バナナ", "オレンジ" };
// CheckedListBoxにデータバインディング
checkedListBox1.DataSource = fruits;
}
}
このコードでは、リストに含まれる果物の名前をCheckedListBoxにバインドしています。
データソースを変更することで、CheckedListBoxの項目も自動的に更新されます。
チェック状態の保存と復元
ユーザーがチェックした状態を保存し、後で復元することができます。
これにより、アプリケーションを再起動してもユーザーの選択を保持することが可能です。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// CheckedListBoxの項目を追加
checkedListBox1.Items.Add("りんご");
checkedListBox1.Items.Add("バナナ");
checkedListBox1.Items.Add("オレンジ");
// チェック状態を復元
RestoreCheckedState();
}
private void SaveCheckedState()
{
// チェック状態を保存
var checkedIndices = checkedListBox1.CheckedIndices.Cast<int>().ToArray();
Properties.Settings.Default.CheckedIndices = string.Join(",", checkedIndices);
Properties.Settings.Default.Save();
}
private void RestoreCheckedState()
{
// チェック状態を復元
var indices = Properties.Settings.Default.CheckedIndices.Split(',').Select(int.Parse);
foreach (var index in indices)
{
checkedListBox1.SetItemChecked(index, true);
}
}
}
この例では、チェックされた項目のインデックスをカンマ区切りの文字列として保存し、アプリケーションの再起動時にその状態を復元しています。
これにより、ユーザーの選択を永続化することができます。
まとめ
この記事では、C#のWindowsフォームアプリケーションにおけるCheckedListBoxの基本的な使い方から応用例までを詳しく解説しました。
CheckedListBoxの項目を取得する方法やイベントの活用法、さらに複数のCheckedListBoxを連携させる方法やデータバインディングの利用、チェック状態の保存と復元についても触れています。
これらの知識を活用して、よりインタラクティブでユーザーフレンドリーなアプリケーションを開発してみてください。