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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンのイベントで異なるウィ...
-
C#でのWNetAddConnection3の使...
-
Junitテストでvoid戻り値メッソ...
-
大量のデータを読み込んで表示...
-
C#で別のFormへ複数の値を返そ...
-
【Java】画像表示が出来ない!
-
[C#.net]スレッド化された別フ...
-
シリアル通信で受信したデータ...
-
JavaプログラムのUML化
-
C#でキーイベントが発生しない...
-
C# 矢印キーの取得
-
Graphicsクラスを使って描画履...
-
C# MouseHoverを何度も呼ぶには
-
Java配列でNullPointerExceptio...
-
Path型をString型へ変換する(Java)
-
JSPやサーブレットでSystem.out...
-
オブジェクトの中のプロパティ...
-
csvファイルを2次元配列に格納
-
ダブルクォーテーションのrepla...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
C#でのWNetAddConnection3の使...
-
Junitテストでvoid戻り値メッソ...
-
ボタンの複数割り当てについて
-
C# DataGridView列カスタマイズ
-
C# WinForm のDataGridView Cel...
-
C# visibleプロパティをfalseに...
-
[C#.net]スレッド化された別フ...
-
C# 矢印キーの取得
-
unityでのC++エラーの原因がわ...
-
C#から、C++で作成したdll内の...
-
コンボボックスを使う時の警告
-
JavaFXでの表内のチェックボッ...
-
C#で別のFormへ複数の値を返そ...
-
vc++ 2005 Pictureboxの透過処理
-
プログラミング(Java)じゃん...
-
C#でキーイベントが発生しない...
-
正規表現
-
C# MouseHoverを何度も呼ぶには
おすすめ情報