dポイントプレゼントキャンペーン実施中!

ピクチャボックスのクリックイベント

Visual C#でトランプゲームを作っているのですが

this.PB = new System.Windows.Forms.PictureBox[54];

↑のようにピクチャボックスの配列作ったのですが
それぞれのクリックイベントを作りたいのですが、それがどうしても分かりません

たとえばPB[30]がクリックされたらPB[30]の画像を他のピクチャボックスに移すなど

このようなことをするにはどうすればいいですか?

A 回答 (1件)

 動的生成されたピクチャーボックスのイベントハンドラの作り方がわからないのか、イベントハンドラに記述する処理がわからないのか、どっちなのかよくわかりませんが……



// タグ用クラス
public class Card
{
public int no;
public Bitmap bmp;

public Card(int no, Bitmap bmp)
{
this.no = no;
this.bmp = bmp;
}
}

// フォーム1クラス
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

// クラスの内部変数
private static Bitmap[] cardbmp = {cardbmp01, cardbmp02, ……, cardbmp52};
private PictureBox[] PB = new PictureBox[52];
private int old_no;
private Bitmap empty = new Bitmap(50, 75);

// フォームが立ち上がったとき
private void Form1_Load(object sender, EventArgs e)
{
old_no = -1;

this.ClientSize = new Size(50 * 13, 75 * 4);

for (int i = 0; i < 52; i++) {
// ピクチャーボックスの生成
PB[i] = new PictureBox();
PB[i].Location = new Point(50 * (i % 13), 75 * (i / 13));
PB[i].Size = new Size(50, 75);
PB[i].BorderStyle = BorderStyle.FixedSingle;
// イベントハンドラの登録
PB[i].Click += new EventHandler(this.Card_Click);
// ピクチャーボックスの関連付け
this.Controls.Add(PB[i]);
// ピクチャーボックスの表示
DrawCard(i, cardbmp[i]);
PB[i].Tag = new Card(i, cardbmp[i]);
}
}
// カード描画処理
private void DrawCard(int no, Bitmap bmp)
{
Graphics gs = PB[no].CreateGraphics();
gs.DrawImage(bmp, 0, 0, PB[no].Width, PB[no].Height);
}
// カードのクリア処理
private void ClearCard(int no)
{
Graphics gs = PB[no].CreateGraphics();
gs.Clear(Color.Green);
}
// クリック時のイベントハンドラ
public void Card_Click(object sender, EventArgs e)
{
// クリックされたピクチャーボックスの情報を取得
Card cinf = (Card)(((PictureBox)sender).Tag);
if (old_no >= 0) {
// クリックされたピクチャーボックスの画像を
// 表示のないピクチャーボックスに描画
DrawCard(old_no, cinf.bmp);
PB[old_no].Tag = new Card(old_no, cinf.bmp);
}
// クリックされたピクチャーボックスをクリア
ClearCard(cinf.no);
PB[cinf.no].Tag = new Card(cinf.no, empty);
old_no = cinf.no;
}
}

 ここではどのピクチャーボックスをクリックしてもイベントハンドラとしてCard_Clickが呼ばれる。
 ピクチャーボックスの番号と表示してる画像のビットマップをクラスCardのオブジェクトとしてTagプロパティに登録してるので、イベントハンドラではそれを見てクリックされたピクチャーボックスの判断をしている。
 イベントハンドラの処理は、クリックされたピクチャーボックスのビットマップをクリアされているピクチャーボックスに移し、クリックされたピクチャーボックスをクリアしている。(初回はクリアのみ)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!