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

C#です

ピクチャボックスをクリックしたら・・・という動作ができません・・・
宣言等はこのようにしました

for (int i = 1; i <= 25; i++)
{
for (int j = 1; j <= 25; j++)
{
map[i, j] = new PictureBox();
map[i, j].Size = new Size(tate, yoko);
map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす
map[i, j].BackColor = Color.Black;
map[i, j].Click += new EventHandler(map_click);//マップをクリックした
}
}

map_clickというメソッドにはどのようにかけばいいのでしょうか?
そのピクチャボックスをクリックしたらそのピクチャボックスの背景色を緑色に変える
という風に書きたいのですが・・・・

A 回答 (5件)

 こんばんは。

参考程度に。
 
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i <= 25; i++)
{
for (int j = 1; j <= 25; j++)
{
map[i, j] = new PictureBox();
map[i, j].Size = new Size(tate, yoko);//用意する
map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす
map[i, j].BackColor = Color.Black;

//(2)を使用する為に必要
//http://msdn.microsoft.com/ja-jp/library/system.w …
map[i, j].Tag = Color.Green;
map[i, j].Click += new EventHandler(map_click);//マップをクリックした
this.Controls.Add(map[i, j]);//絶対に必要
}
}
}
 以下3つのうちのどれか。
 (1)緑色になるだけ。
private void map_click(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Green;
}
 (2)緑色の状態で、もう一回押すと黒色に戻る。
private void map_click(object sender, EventArgs e)
{
Control ctl = sender as Control;
Color cPrev = ctl.BackColor;
ctl.BackColor = (Color)ctl.Tag;
ctl.Tag = cPrev;
}
(3)最後に押されたものだけが緑色になる。
private void map_click(object sender, EventArgs e)
{
Control ctl = sender as Control;
Control ctlPrev = this.Tag as Control;

if (ctlPrev != ctl)
{
this.Tag = ctl;
ctl.BackColor = Color.Green;

if (ctlPrev != null)
{
ctlPrev.BackColor = Color.Black;
}
}
}
    • good
    • 0

一つだけ#1の内容に誤りがあるので訂正しておきます。



> 「フォーカスが離れたら背景色を元に戻す」というイベント

PictureBoxではフォーカス関連のイベントが使えない(=おそらくフォーカス移動そのものが発生しない)ので、「別のところがクリックされたら前回クリックされたところの背景色を戻す」という処理はmap_click内で実施する必要があります。
こちらは「まず全てのPictureBoxの背景色を戻して、クリックされたところだけ改めて緑にする」とすればよいでしょう。
    • good
    • 0

> 質問している意味を分かっていらっしゃいますか?



もちろん。
ですから#1では必要な情報をきちんと出してますよ?
「ハンドラとして登録したメソッドの引数に、イベントを飛ばした(=今回の質問ではクリックされた)オブジェクトがobject型で渡されるからPictureBoxにダウンキャストして背景色をいじればよい」と。

もとの質問が

> map_clickというメソッドにはどのようにかけばいいのでしょうか?

だったのでmap_clickのプロトタイプはわかっているものとして書いてますが、そちらがわかっていないという事でしたらフォームデザイナの機能で適当なフォームにClickイベントを割り当ててみましょう。
    • good
    • 0

もとの質問のコードであれば2行で書ける程度のものですから「初心者」であることはコードを出すに足る理由ではないと判断します。


つーかたかが2行で済むコードなのですからまずは自力で頑張ってください。
「初心者」を脱却するには絶対に必要なことですので。

この回答への補足

質問している意味を分かっていらっしゃいますか?
やってみてわからないから質問をしているのです

補足日時:2011/10/08 19:50
    • good
    • 0

イベントハンドラの引数sender(Object型)にはそのイベントを投げた直接のオブジェクトが格納されています。


ですからsenderをPictureBox型にダウンキャストしてBackColorを変更すればOK。

ただし、おそらく「フォーカスが離れたら背景色を元に戻す」というイベントも追加しないとダメなんでは?

この回答への補足

C#初心者なんでソースをいただけると幸いです・・・

補足日時:2011/10/07 20:48
    • good
    • 0

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