本記事では、Windows Formsアプリケーションで頻繁に利用される主要コントロールの具体的な実装手順を解説します。各コントロールのプロパティ設定やイベント処理を中心に、実践的なコード例を提示します。
1. MenuStrip:メニューバーの構築
MenuStripコントロールは、アプリケーションにメニューバーを追加するための標準コンポーネントです。デザイナ上で視覚的に編集できるほか、コードから動的に生成することも可能です。
主要プロパティ
| プロパティ | 説明 |
|---|---|
| Name | メニューオブジェクトの識別子 |
| Items | メニューに表示する項目のコレクション |
| Text | メニュー項目に表示されるテキスト |
| ShowDropDown() | 指定した項目のドロップダウンを表示 |
デザイナ上でMenuStripを追加すると、画面上部に「ここに入力」と表示される領域が現れます。そこに直接テキストを入力することで、トップレベルのメニュー項目を作成できます。作成した項目をダブルクリックすると、Clickイベントハンドラが自動生成され、通常のボタンと同じようにイベント処理を記述できます。
動的なメニュー追加
以下のコード例では、コードビハインドでメニュー項目を動的に生成し、クリックイベントをバインドする方法を示します。
// 単一項目の追加
menuStrip1.Items.Add("新規メニュー");
// 複数項目の一括追加とイベントハンドラ設定
private void Form1_Load(object sender, EventArgs e)
{
ToolStripMenuItem[] items = new ToolStripMenuItem[3];
items[0] = new ToolStripMenuItem("ファイル");
items[1] = new ToolStripMenuItem("編集");
items[2] = new ToolStripMenuItem("ヘルプ");
items[2].Click += new EventHandler(Help_Click);
menuStrip1.Items.AddRange(items);
}
private void Help_Click(object sender, EventArgs e)
{
MessageBox.Show("ヘルプが選択されました");
}
動的に生成した項目に対しては、ToolStripMenuItemクラスのインスタンスを作成し、必要なプロパティを設定した後、AddRangeメソッドで一括追加します。
2. TextBox:テキスト入力フィールド
TextBoxは、ユーザーからのテキスト入力を受け付ける基本的なコントロールです。以下のプロパティを設定することで、入力動作をカスタマイズできます。
// パスワード入力のマスキング
textBox1.PasswordChar = '*'; // 入力文字をアスタリスクで隠す
textBox2.UseSystemPasswordChar = true; // システム標準の黒丸で隠す
// 複数行入力の許可
textBox3.Multiline = true; // 複数行テキストを有効化
// 読み取り専用モード
textBox4.ReadOnly = true; // ユーザーによる編集を禁止
3. ListBox:項目リストの操作
ListBoxは、複数の項目を一覧表示し、ユーザーが選択できるコントロールです。ここでは、動的な項目追加と削除を実装します。
// フォームロード時に複数選択モードを設定
private void MainForm_Load(object sender, EventArgs e)
{
listBox1.SelectionMode = SelectionMode.MultiExtended;
}
// 追加ボタンのクリックイベント
private void btnAdd_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtInput.Text))
{
listBox1.Items.Add(txtInput.Text);
txtInput.Clear();
}
}
// 削除ボタンのクリックイベント(選択項目をすべて削除)
private void btnDelete_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItems.Count > 0)
{
// SelectedItemsのコレクションは変更に弱いため、逆順ループで削除
for (int i = listBox1.SelectedIndices.Count - 1; i >= 0; i--)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
}
}
else
{
MessageBox.Show("削除する項目を選択してください。");
}
}
削除処理では、SelectedItemsコレクションが動的に変化するため、インデックスを逆順でループすることで安全に削除を行います。
4. RadioButton:単一選択の実装
RadioButtonは、複数の選択肢から1つだけを選ばせる場合に使用します。以下のコードは、選択状態に応じた処理を行います。
// 確定ボタンのクリックイベント
private void btnConfirm_Click(object sender, EventArgs e)
{
if (radioOption1.Checked)
{
MessageBox.Show("オプション1が選択されています");
}
else if (radioOption2.Checked)
{
MessageBox.Show("オプション2が選択されています");
}
else
{
MessageBox.Show("いずれかのオプションを選択してください");
}
}
RadioButtonは、同じ親コンテナ(PanelやGroupBoxなど)に配置することで、自動的に排他選択グループを形成します。
これらの基本的なコントロールの操作方法を理解することで、より複雑なWindows Formsアプリケーションの開発基盤を構築できます。