この章では、チェックボックスを取り扱ってみます。
CheckBoxクラスの継承関係は、Buttonクラスと同じです。CheckBoxとButtonは兄弟の関係にあります。
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Control
System.Windows.Forms.ButtonBase
System.Windows.Forms.CheckBox
必須のプロパティはCheckedでしょう。
public bool Checked { get; set; }
デフォルトではfalseです。チェックボックスがチェックされているかどうかを示す値を取得または、設定します。AutoCheckプロパティは、デフォルトでtrueです。意図的にfalseにしない限り実際はあまり登場してこないかも知れません。trueの場合は、チェックボックスがクリックされたときにChecked値を自動的に変更し、チェックボックスの外観も変更します。また、CheckedChangedイベントを発生します。(AutoCheckがfalseの場合は自分でClickイベントを処理する必要がある)
では、実際のプログラムを見てみましょう。
// checkbox01.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class checkbox01
{
static CheckBox cb0, cb1;
static Label label;
public static void Main()
{
Form form = new Form();
form.Text = "猫でもわかるC#プログラミング";
form.BackColor = SystemColors.Window;
cb0 = new CheckBox();
cb0.Parent = form;
cb0.Text = "国語";
cb0.Location = new Point(10, 10);
cb0.CheckedChanged += new EventHandler(cb_CheckedChanged);
cb1 = new CheckBox();
cb1.Parent = form;
cb1.Text = "算数";
cb1.Location = new Point(10, 10 + cb0.Height);
cb1.CheckedChanged += new EventHandler(cb_CheckedChanged);
label = new Label();
label.Parent = form;
label.Location = new Point(10, 20 + cb0.Height * 2);
label.Width = 150;
Application.Run(form);
}
static void cb_CheckedChanged(Object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;
if (cb == cb0)
{
if (cb.Checked)
label.Text = "国語がチェックされました";
else
label.Text = "国語のチェックが外されました";
}
if (cb == cb1)
{
if (cb.Checked)
{
label.Text = "算数がチェックされました";
}
else
{
label.Text = "算数のチェックが外されました";
}
}
}
}
フォームは、Mainメソッドの中で直接Formクラスから作っています。cb0, cb1は、他のメソッドからも見えるようフィールドにしていますが、Mainメソッドがstaticなのでcb0, cb1もstaticにしています。
チェックの状態が変わったら、ラベルにその旨を書き出しています。
チェックボックスの状態が変わるごとに、ラベルに表示されます。
Update 18/Nov/2006 By Y.Kumei