
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を探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でキーイベントが発生しない...
-
【Java】画像表示が出来ない!
-
大量のデータを読み込んで表示...
-
Form2のテキストボックスを更新...
-
Java 他クラスの呼び出しが上手...
-
Processingでマウスクリックで...
-
ColabでのPytorchのエラー
-
ジャグ配列とは
-
Javascript エラーメッセージが...
-
C#の質問
-
Java 配列<選挙>
-
JAVAのエラーの意味が分かりま...
-
C#の質問
-
Javaの問題なんですが、 エはど...
-
java 配列問題
-
配列内のサウンドファイルのフ...
-
javascriptでcsv出力しようと思...
-
java 配列
-
(急募)一覧表画面でパスワード...
-
Java配列の問題を教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
C#でのWNetAddConnection3の使...
-
C# WinForm のDataGridView Cel...
-
C#から、C++で作成したdll内の...
-
C# DataGridView列カスタマイズ
-
Junitテストでvoid戻り値メッソ...
-
C#でキーイベントが発生しない...
-
C#で別のFormへ複数の値を返そ...
-
ボタンの複数割り当てについて
-
C# visibleプロパティをfalseに...
-
C# 親フォームで指定した値を...
-
Processingでマウスクリックで...
-
C# 矢印キーの取得
-
決められて時間が経過するとア...
-
C# タスクバーを隠したフォーム...
-
ユーザーコントロールを動的に...
-
コンボボックスを使う時の警告
-
[C#.net]スレッド化された別フ...
-
ボタンのイベントで異なるウィ...
おすすめ情報