はじめに
C#のWindows Formsアプリケーションにおいて、CheckBoxはユーザーに複数の選択肢の中から任意のものを選択させる機能を提供する上で非常に便利なコントロールです。本記事では、CheckBoxを用いて複数選択機能を実装する方法について、具体的なコード例を交えて解説していきます。
複数選択機能の実現方法
複数のCheckBoxを配置する
複数のCheckBoxをフォーム上に配置します。各CheckBoxには、選択したい項目の名前を設定します。
CheckedChangedイベントの処理
複数のCheckBoxごとにイベントを作成するのは非効率です。 代わりに、一つのイベントハンドラーで全てのCheckBoxの状態を管理 する方が効率的です。
private void checkBox_CheckedChanged(object sender, EventArgs e) { CheckBox checkBox = (CheckBox)sender; // 選択された項目の処理 if (checkBox.Checked) { // 選択された場合の処理 } else { // 選択が解除された場合の処理 } }
選択された項目の情報を取得する
選択されたCheckBoxの情報を取得するには、Checkedプロパティを使用します。Checkedプロパティがtrueであれば、そのCheckBoxが選択されていることを意味します。
コード例
using System; using System.Collections.Generic; using System.Windows.Forms; namespace MultipleCheckBoxExample { public partial class Form1 : Form { private List selectedItems = new List(); public Form1() { InitializeComponent(); // 全てのCheckBoxのCheckedChangedイベントを共通のハンドラーに設定 foreach (Control control in this.Controls) { if (control is CheckBox checkBox) { checkBox.CheckedChanged += checkBox_CheckedChanged; } } } private void checkBox_CheckedChanged(object sender, EventArgs e) { UpdateSelectedItems(); } private void UpdateSelectedItems() { selectedItems.Clear(); if (checkBox1.Checked) { selectedItems.Add("項目1"); } if (checkBox2.Checked) { selectedItems.Add("項目2"); } if (checkBox3.Checked) { selectedItems.Add("項目3"); } // 選択された項目を表示する(例) MessageBox.Show("選択された項目:" + string.Join(", ", selectedItems)); } } }
コード説明
- コードの簡潔化: 複数のCheckBoxごとにイベントを作成する必要がなくなり、コードがすっきりします。
- 保守性の向上: CheckBoxが増減した場合でも、イベントハンドラーを追加・削除する手間が減ります。
- 効率化: 同じ処理を繰り返すコードが減り、実行速度が向上する可能性があります。
foreach (Control control in this.Controls) { if (control is CheckBox checkBox) { checkBox.CheckedChanged += checkBox_CheckedChanged; } }
このコードブロックでは、フォーム上の全てのコントロールをループで処理しています。
foreach (Control control in this.Controls)
: フォーム上の全てのコントロールをcontrol
変数に格納し、順に処理します。if (control is CheckBox checkBox)
:control
がCheckBox型であれば、checkBox
変数にキャストして、そのCheckBoxのCheckedChangedイベントにcheckBox_CheckedChanged
メソッドを紐づけます。
checkBox_CheckedChangedメソッド について
private void checkBox_CheckedChanged(object sender, EventArgs e) { UpdateSelectedItems(); }
checkBox_CheckedChanged メソッドは、全てのチェックボックスに紐づけられています。よって、いずれかのチェックボックスのチェック状態が変更されると、このcheckBox_CheckedChangedが呼び出され、UpdateSelectedItems メソッドが実行されます。
UpdateSelectedItems メソッドについて
- selectedItems.Clear();
selectedItemsは、選択された項目名を格納するリストです。この行で、リストの中身を全てクリアし、新しく選択された項目を格納するための準備をします。 - if (checkBox1.Checked)
checkBox1.Checkedは、checkBox1がチェックされているかどうかを判定するブール値です。チェックされている場合は、if文内の処理が実行されます。 - selectedItems.Add(“項目1”);
selectedItemsリストに”項目1″を追加します。 - 以降のif文
checkBox2, checkBox3についても同様の処理を行い、チェックされている場合は、それぞれに対応する項目名をリストに追加します。MessageBox.Show(“選択された項目:” + string.Join(“, “, selectedItems));:
- string.Join(“, “, selectedItems)
selectedItemsリスト内の全ての要素をカンマで区切って一つの文字列に変換しま - MessageBox.Show
変換した文字列をメッセージボックスで表示します。
まとめ
複数のCheckBoxのCheckedChangedイベントを共通のハンドラーにまとめることで、コードの効率化、保守性の向上、可読性の向上を実現できます。この手法は、Windows Formsアプリケーションで複数のCheckBoxを扱う際に、非常に有効なテクニックです。
コメント