- 締切済み
ピクチャボックスのクリックイベント
ピクチャボックスのクリックイベント Visual C#でトランプゲームを作っているのですが this.PB = new System.Windows.Forms.PictureBox[54]; ↑のようにピクチャボックスの配列作ったのですが それぞれのクリックイベントを作りたいのですが、それがどうしても分かりません たとえばPB[30]がクリックされたらPB[30]の画像を他のピクチャボックスに移すなど このようなことをするにはどうすればいいですか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- magicalpass
- ベストアンサー率58% (378/648)
動的生成されたピクチャーボックスのイベントハンドラの作り方がわからないのか、イベントハンドラに記述する処理がわからないのか、どっちなのかよくわかりませんが…… // タグ用クラス 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プロパティに登録してるので、イベントハンドラではそれを見てクリックされたピクチャーボックスの判断をしている。 イベントハンドラの処理は、クリックされたピクチャーボックスのビットマップをクリアされているピクチャーボックスに移し、クリックされたピクチャーボックスをクリアしている。(初回はクリアのみ)