【C#】コンボボックスで画像を選択できるようにしてみる(その1)
おはようございます。
今日はふと、コンボボックスのリスト項目を画像にしてみました。
普通にそういったコンポーネントは容易されていないので、
コンボボックスの設定で、自力で描画するよってモード(オーナードロー)を指定してやる必要があります。
適当に動物の画像を落としてきて試してみました。
スポンサーリンク
画面
Windows Forms でプロジェクトを作成し、画面にラベル、コンボボックス、イメージリストを配置。
イメージリストに、コンボボックスで表示する画像のコレクションを設定する。
更に、イメージリストのプロパティで Size を画像と合わせておく必要がありますよ。
プログラム
Form1.cs
using System.Drawing; using System.Windows.Forms; namespace SampleImageCombobox { public partial class Form1 : Form { public Form1() { InitializeComponent(); // ドロップダウンのスタイル // これを設定しないと、選択時に画像が表示されないよ cb_image.DropDownStyle = ComboBoxStyle.DropDownList; // オーナードローを指定 cb_image.DrawMode = DrawMode.OwnerDrawFixed; // 画像の高さを指定 cb_image.ItemHeight = 200; // イメージリストを元にコンボボックスアイテムを追加していく foreach (Image img in img_source_list.Images) { cb_image.Items.Add(img); } // 別に文字列を設定してもよさそう //cb_image.Items.Add("あ"); //cb_image.Items.Add("い"); //cb_image.Items.Add("う"); } private void Cb_image_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); // コンボボックスとして処理できるようにキャスト ComboBox cb = sender as ComboBox; Image img; if (e.Index > -1) { // コンボボックスから取得してもOK //img = cb.Items[e.Index] as Image; // イメージリストの該当インデックス画像を設定 img = img_source_list.Images[e.Index]; } else { // 初期表示時にデフォルト表示する場合は インデックス -1 で画像を指定すればOK img = img_source_list.Images[0]; // 初期表示時に何も表示しない場合はインデックス -1 を処理しなければOK //return; } // 画像と座標を指定して描画する e.Graphics.DrawImage(img, e.Bounds.X, e.Bounds.Y); // フォーカス時の囲い線を表示する e.DrawFocusRectangle(); } } }
起動してみる
初期表示時に先頭のイメージを表示。
コンボボックスを展開したイメージ。
まとめ
ひとまず、簡単にコンボボックスに画像を表示するサンプルでした。
次回もう少しなんかやってみようと思います。
何かのお役に立てれば。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません