
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.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プロパティに登録してるので、イベントハンドラではそれを見てクリックされたピクチャーボックスの判断をしている。
イベントハンドラの処理は、クリックされたピクチャーボックスのビットマップをクリアされているピクチャーボックスに移し、クリックされたピクチャーボックスをクリアしている。(初回はクリアのみ)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
C#で別のFormへ複数の値を返そ...
-
C#でキーイベントが発生しない...
-
ピクチャボックスのクリックイ...
-
ユーザーコントロールを動的に...
-
vc++ 2005 Pictureboxの透過処理
-
C# バイナリダンプを構造体に簡...
-
コンボボックスを使う時の警告
-
C# 矢印キーの取得
-
オブジェクトの中のプロパティ...
-
JSPでDBからデータ読み込みブラ...
-
C言語のポインターに関する警告
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
動的配列が存在(要素が有る)か...
-
javaで質問です。 文字列2023/2...
-
flush()とclose()について
-
1~100までの数字を表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
コンボボックスを使う時の警告
-
C# DataGridView列カスタマイズ
-
Junitテストでvoid戻り値メッソ...
-
C# 矢印キーの取得
-
C# WinForm のDataGridView Cel...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
GOF本のStrategyのJava版での質...
-
イメージボタンを作成したいの...
-
以下のコードのどこが問題なの...
-
Androidでこのエラーを解決した...
-
C#で、定数をフラグ(if文)に...
-
C# 親フォームで指定した値を...
-
Javaでウィンドウ作成について
-
負の数を取得するには?
-
Windowsのリソース作成について
-
javaの同期について
おすすめ情報