CheckBoxクラスのImageプロパティにBitmapオブジェクトを割り当てるだけです。
イメージの配置を指定するにはButtonBase.ImageAlignプロパティを設定します。
public ContentAlignment ImageAlign { get; set; }ContentAlignment列挙体についてはすでに、第16章で出てきています。
チェックボックスに、イメージとテキストの両方を表示する場合、その配置が問題となります。これは、ButtonBase.TextImageRelationプロパティを設定します。(C#2.0で追加)
public TextImageRelation TextImageRelation { get; set; }TextImageRelation列挙体のメンバと意味は次の通りです。
メンバ | 意味 |
---|---|
ImageAboveText | イメージはテキストの上部に表示 |
ImageBeforeText | イメージはテキストの前(左側)に表示 |
Overlay | テキストとイメージは同じスペースを共有 |
TextAboveImage | テキストがイメージの上部に表示 |
TextBeforeImage | テキストがイメージの前(左側)に表示 |
さて、FormクラスにはPaddingというプロパティが存在します。これは、Controlクラスから継承されてきています。
public Padding Padding { get; set; }プロパティ値のPaddingは、構造体です。
Paddingは、コンテナに詰め物をして、その内側にコントロールを配置するイメージです。これに対して、Marginは、コントロールの外側にスペースを作ってコンテナに配置するイメージです。
Form.Marginは、
public Padding Margin { get; set; }となっており、プロパティ値はPadding構造体です。この構造体もC#2.0から追加された物です。
コンストラクタは、オーバーロードされた2つのバージョンがあります。
public Padding ( int all )allは、すべての端の埋め込みに使用するピクセル数です。
public Padding ( int left, int top, int right, int bottom )left,top,right,bottomはそれぞれの端の埋め込みに使用するピクセル数です。
Padding構造体の主なプロパティには、次のような物があります。
プロパティ | プロパティ値 | 意味 |
---|---|---|
All | int | すべての端の埋め込み値の取得・設定 |
Bottom | int | 下端の埋め込み値の取得・設定 |
Horizontal | int | 右端と左端の埋め込み値の合計の取得 |
Left | int | 左端の埋め込み値の取得・設定 |
Right | int | 右端の埋め込み値の取得・設定 |
Size | Size | 埋め込み情報をSystem.Drawing.Size形式で取得 |
Top | int | 上端の埋め込み値の取得・設定 |
Vertical | int | 上端と下端の埋め込み値の合計の取得 |
サンプルのプログラムを作る前準備として、適当なイメージを用意しておいてください。 ここでは、gifファイルを用意してみました。
イメージ | ファイル名 |
---|---|
file.gif | |
open.gif | |
save.gif | |
exit.gif |
これらのイメージを、プロジェクトに埋め込んでおいてください。
では、サンプルのプログラムを見てみましょう。
// bmpchk01.cs using System; using System.Drawing; using System.Windows.Forms; class bmpchk01 : Form { public static void Main() { Application.Run(new bmpchk01()); } public bmpchk01() { Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; Padding = new Padding(10); Bitmap bmpFile, bmpOpen, bmpSave, bmpExit; bmpFile = new Bitmap(GetType(), "bmpchk01.file.gif"); bmpOpen = new Bitmap(GetType(), "bmpchk01.open.gif"); bmpSave = new Bitmap(GetType(), "bmpchk01.save.gif"); bmpExit = new Bitmap(GetType(), "bmpchk01.exit.gif"); MyCheckBox mcb3 = new MyCheckBox(this, bmpExit, "Exit"); MyCheckBox mcb2 = new MyCheckBox(this, bmpSave, "Save"); MyCheckBox mcb1 = new MyCheckBox(this, bmpOpen, "Open"); MyCheckBox mcb0 = new MyCheckBox(this, bmpFile, "File"); } } class MyCheckBox : CheckBox { public MyCheckBox(Form f, Bitmap bmp, string str) { Parent = f; BackColor = SystemColors.Control; Dock = DockStyle.Top; Image = bmp; ImageAlign = ContentAlignment.MiddleCenter; Height = bmp.Height; Text = str; TextImageRelation = TextImageRelation.ImageBeforeText; } protected override void OnMouseHover(EventArgs e) { base.OnMouseHover(e); Cursor = Cursors.Hand; BackColor = Color.Red; } protected override void OnMouseLeave(EventArgs eventargs) { base.OnMouseLeave(eventargs); Cursor = Cursors.Arrow; BackColor = SystemColors.Control; } protected override void OnCheckedChanged(EventArgs e) { base.OnCheckedChanged(e); int n = Parent.Controls.Count; CheckBox[] cb = new CheckBox[n]; string str = ""; for (int i = 0; i < n; i++) { cb[i] = (CheckBox)Parent.Controls[i]; if (cb[i].Checked) str += (cb[i].Text + " "); } if (str != "") str = "現在選択されているのは" + str + "です"; else str = "現在選択されている項目はありません"; Parent.Text = str; } }親フォームのPaddingをPadding(10)で設定して、CheckBoxのDockをDockStyle.Topに設定して、次々にドッキングさせています。今までは、Locationプロパティを設定していましたね。
実行結果は、次のようになります。Paddingの意味をはっきりさせるために、CheckBoxのBackColorをSystemColors.Controlに設定しています。
フォームのクライアント領域の左右と上にPaddingが存在することがわかります。
マウスでポイントすると、CheckBoxの背景色が赤になります。
親フォームのサイズを変更しても、コントロールは自動的に伸縮しています。
選択されている項目は、タイトルバーに表示されています。
Update 21/Nov/2006 By Y.Kumei