*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
<C#>
コントロールのList化 <基礎的サンプル>
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
「<C#> コントロールのイベントにおける情報の取り扱い」
における一連の説明(知恵ノート)において、ここでは、
「<C#> コントロールのList化 <基礎的サンプル>」
について説明します。
総合の目次
本ページを含めた関連事項の総合目次です。
http://note.chiebukuro.yahoo.co.jp/detail/n231146
関連サンプル
本サンプルと関連性のあるサンプルです。
すなわち、次回以降のサンプルです。
関連サンプル1
「コントロールのList化 <基礎的サンプル>」
今回のサンプルです。
関連サンプル2
「コントロールのList化 <要素追加メソッド>」
http://note.chiebukuro.yahoo.co.jp/detail/n231427
はじめに
複数のコントロール(一種類複数)をList化して管理します。
ただし、本サンプルでは、コントロールをフォームに設置するだけで、特に機能を実装しません。
すなわち、フォーム上に、List化されたコントロールを貼り付けるだけです。
なお、マウスのイベントによるコントロールの移動等の機能は、別のサンプルで紹介する予定です。
(本サンプルの範囲では、コントロールをList化することだけが目的のため)
なお、コントロールをList化したものをコレクションと言います(コレクションの意味の詳細は、下記参照)。
コレクションの意味
コレクションとは、複数ある同じ型のデーターを、配列状にまとめて管理するためのデータ構造を総称したものです。
例えば、複数のピクチャボックスを、配列(又はリスト)でまとめて、それらのピクチャボックスを制御管理すると言うものです。
今、例として、ピクチャボックスをあげましたが、他のコントロールやクラスでも構いません。
例えば、複数のテキストボックスを配列(又はリスト)でまとめたものは、コレクションです。
(なお、今回のサンプルと、一連の関連サンプルでは、コレクションにする対象コントロールは、ピクチャボックスとします)
関連サンプルと比べた特徴
本サンプルと関連サンプルでは、コレクションを作成します。
まずは、基礎的なサンプルを作ります。
次に、要素追加メソッドを設けるなど、機能性を向上させます。
<関連サンプル1>
「コントロールのList化 <基礎的サンプル>」
複数のコントロール(一種類複数)をList化する基礎的なサンプルです。
<関連サンプル2>
「コントロールのList化 <要素追加メソッド>」
コレクション(複数コントロールをList化したもの)を新規に生成するだけではなく、後から要素(コントロール)を追加するメソッドも用意します。
サンプルコード
ここで取り上げるサンプルは、なるべく複雑にならない範囲で、コレクションを確かめられるものとします。
関連サンプルを含めた共通の仕様
複数のコントロール(一種類複数)をList化して管理します。
ただし、本サンプルでは、コントロールをフォームに設置するだけで、特に機能を実装しません。
すなわち、マウスのイベントによる処理(画像移動やコピー)は、一切行ないません。
ちなみに、マウスイベントによる処理(画像移動等)を含めたプログラムは、後のサンプルで行なう予定です。
本サンプルの仕様概要
解説する対象のコントロールは、ピクチャボックス(pictureBox)とします。
そのピクチャボックスでの表示対象の画像は、
C:\キャラクター.bmp
とします。
ちなみに、bmp ファイルでは無く、jpg ファイルでも可能です。
なお、プログラムの操作上の仕様は、特にありません(マウスイベントによる画像移動などは、行ないません)。
本サンプルでは、複数のコントロール(ピクチャボックス)を、フォーム上に表示するだけです。
フォームデザイン等の前準備
コードを記述する前に、フォームのデザイン作成などの、以下の前準備を行なって下さい。
<プロジェクトの作成>
本サンプルの確認用に、新規にプロジェクトを作成して下さい。
プロジェクトの種類は、「Windowsフォームアプリケーション」です。
<フォームのデザイン>
デザイン画面でのコントロールの貼り付けは、特にありません。
なお、ピクチャボックス(pictureBox)は、ソースコードで生成するので、デザイン画面での操作はありません。
<イベントプロシージャの作成>
デザイン画面のフォームをダブルクリックして、Form1_Load() メソッドを作って下さい。
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// コントロールのList化 <基礎的サンプル>
namespace CollectionBasicSample1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//============
// メンバー変数
// ピクチャボックスのコレクション
private List<System.Windows.Forms.PictureBox> PictureBoxes;
// ピクチャボックスの数
private int NumPicture;
//============
// ピクチャボックスコレクション初期化メソッド
// --- 既に生成済みのピクチャボックスコレクションに対して、その要素を追
// 加します。すなわち、要素(ピクチャボックス)の生成と初期化を行な
// います。
// 第1引数: 対象のコレクション
// 第2引数: 追加する要素(ピクチャボックス)の数
// 第3引数: コレクションを貼り付けるフォーム
private void InitializePictureBoxes(
ref List<System.Windows.Forms.PictureBox> Picture_Boxes,
int Num_Picture,
Form Form_Obj)
{
int i;
//------------
// リストの要素追加
//------------
// コレクション要素追加用ループ
for (i = 0; i < Num_Picture; i++)
{
// ピクチャボックスの生成と、リストへの追加
Picture_Boxes.Add(new System.Windows.Forms.PictureBox());
}
//------------
// ピクチャボックスの初期化処理
//------------
// ピクチャボックス初期化処理開始用のループ
for (i = 0; i < Picture_Boxes.Count; i++)
{
// ピクチャボックスの初期化処理を開始
((System.ComponentModel.ISupportInitialize)(Picture_Boxes[i])).BeginInit();
}
// ピクチャボックスを並べて行くための各種変数
int x = 0; // 配置位置x座標
int y = 0; // 配置位置y座標
int Delta_X = 20; // 並びの横方向の間隔
int Delta_Y = 30; // 並びの縦方向の間隔
for (i = 0; i < Picture_Boxes.Count; i++)
{
//- - - - - - -
// ピクチャボックスの属性値を設定
Picture_Boxes[i].Location = new System.Drawing.Point(x, y);
Picture_Boxes[i].Name = "pictureBox" + i.ToString();
Picture_Boxes[i].Size = new System.Drawing.Size(70, 70);
Picture_Boxes[i].TabIndex = i;
Picture_Boxes[i].TabStop = false;
//- - - - - - -
// 次ターンの準備
// ピクチャボックスの配置位置を横方向にずらす。
x = x + Delta_X;
// 横方向にずらした結果、フォームからはみ出した場合の処理
// (なお、30を引いているのは、ぎりぎりいっぱいに成らない
// ように、少し余裕を持たせるため)
if (x > (Form_Obj.ClientSize.Width - 30))
{
// 座標位置を左に戻す。
x = 0;
// ピクチャボックスの配置位置を縦方向にずらす。
y = y + Delta_Y;
// 縦方向にずらした結果、フォームからはみ出した場合の処理
// (なお、50を引いているのは、ぎりぎりいっぱいに成らない
// ように、少し余裕を持たせるため)
if (y > (Form_Obj.ClientSize.Height - 50))
{
// 座標位置を上に戻す。
y = 0;
}
}
}
//------------
// 作成したピクチャボックスをフォームに設定
//------------
// フォームへのピクチャボックス追加用ループ
for (i = Picture_Boxes.Count - 1; i >= 0; i--)
{
// フォームにピクチャボックスを追加
this.Controls.Add(Picture_Boxes[i]);
}
// ピクチャボックス初期化処理終了用のループ
for (i = 0; i < Picture_Boxes.Count; i++)
{
// ピクチャボックスの初期化処理を終了
((System.ComponentModel.ISupportInitialize)(Picture_Boxes[i])).EndInit();
}
}
//============
// フォームがロードした時に起動するイベントプロシージャ
private void Form1_Load(object sender, EventArgs e)
{
// ピクチャボックスの数
NumPicture = 120;
// ピクチャボックスのコレクションにおける生成
PictureBoxes = new List<PictureBox>();
// ピクチャボックスコレクションの要素生成ろ初期化
InitializePictureBoxes(ref PictureBoxes, NumPicture, this);
// 画像ファイルをローディングして、画像オブジェクトに設定
Image img = Image.FromFile("C:\\キャラクター.bmp");
// ピクチャボックスに画像や大きさを設定するループ
for (int i = 0; i < PictureBoxes.Count; i++)
{
// ピクチャボックスに画像を設定
PictureBoxes[i].Image = img;
// ピクチャボックスの大きさを変更
// --- ピクチャボックスの大きさを、画像の大きさに合わせる
PictureBoxes[i].ClientSize = new Size(img.Width, img.Height);
}
}
}
}
コードの解説
サンプルコードの中に書かれていますコメントを読んで下さい。
すなわち、コードの解説は、基本的にサンプルコードの中に書かれているコメントとします。
実行結果
サンプルプログラムを実行すると、複数の画像が表示されます。
さいごに
今回のサンプルでは、単純にコントロールをList化しただけです。
よって、今回のサンプルに、後から要素(コントロール)を追加する機能や、要素削除をする機能を備え付けたいです。
取りあえず次回のサンプルでは、要素の追加設定をする機能を付け加える予定です。