ここから本文です

この知恵ノートを「知恵コレクション」に追加しました。

追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。

知恵コレクション」に登録済みです。

再登録しました。

追加に失敗しました。

ノートに戻り、もう一度やり直してください。

すでに1,000件のノートが登録されています。

新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。

追加できませんでした。

ノートは削除されました。

<C#> コントロールのList化 <基礎的サンプル>

ライターさん(最終更新日時:2013/11/28)投稿日:

  • ナイス!:

    1

  • 閲覧数:1316

印刷用のページを表示する

*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<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化しただけです。

よって、今回のサンプルに、後から要素(コントロール)を追加する機能や、要素削除をする機能を備え付けたいです。

取りあえず次回のサンプルでは、要素の追加設定をする機能を付け加える予定です。



このノートに関するQ&A

このノートに関するQ&Aは、まだありません。

このノートについて質問する

このノートについてライターの方に質問できます。

※ライターの方から必ず回答をいただけるとは限りません

※別ウィンドウで開きます

この知恵ノートのライター

グレード

グレード知恵ノートのグレード:1-3

abiko_tetuさん男性

プロ野球見るならスポナビライブ

ピックアップ

【iPhone】修理交換の申込方法...
 ※追記※2015/1/30現在iPhone6及び6+が発売されたのを受け、情...
ピアスに関する正しい知識講座 ...
さて、予備知識も蓄えた所で早速本題!ピアスを開けてみまし...
目のクマの本当の原因、その解...
血行不良の原因は?「目のクマ」の原因を探すとすぐに「血行...
本文はここまでです このページの先頭へ