チェックボックスにイメージを持たせるのは簡単です。
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