0

ここに私の質問があります:私
はc#、windowsフォームで予約シネマシステムを作成してい
ますフォームのロード時にデータベースから利用可能かどうかにかかわらず値を取得する5行のピクチャボックスの5列があるとしましょう。
次に、ユーザーは希望する座席をクリックし (画像ボックスの画像が変わります)、送信ボタンを押します。
すべてのピクチャーボックスの画像を (彼がこの席を望んでいるかどうかを判断するために) 一緒に確認するにはどうすればよいですか?
私はこのようなことができます

if (picturebox11.image=="seatchecked"){seats[]+=11;}
if (picturebox12...

しかし、それを行う別のより速い方法があるかどうか疑問に思っています。(それが役立つ場合、ピクチャボックスの位置は固定されています)

私はこれまでこれを行ってきました:

private void button1_Click(object sender, EventArgs e)
        {
            List<PictureBox> pb = new List<PictureBox>();
            pb.Add(seat11);
            pb.Add(seat12);
            pb.Add(seat13);
            pb.Add(seat14);
            pb.Add(seat15);
            pb.Add(seat21);
            pb.Add(seat22);
            pb.Add(seat23);
            pb.Add(seat24);
            pb.Add(seat25);
            pb.Add(seat31);
            pb.Add(seat32);
            pb.Add(seat33);
            pb.Add(seat34);
            pb.Add(seat35);
            for (int i = 0; i < 20; i++) {

                pb[i].Click += pictureBox_Click;
            }
        }
             void pictureBox_Click(object sender, EventArgs e)
{
   this.pictureBox.Image = ArgyroCinema.Properties.Resources.seatred;     
}
4

1 に答える 1

0

各 PictureBox をリストに格納し、それらを反復処理します。また、ユーザーが座席を選択/選択解除するときは、現時点では文字列を(picturebox11.Image はオブジェクトを返します)Tagと比較しようとしているため、PictureBox のプロパティを変更します。ImageImage

List<PictureBox> pb = new List<PictureBox>();
pb.Add(pictureBox1);
pb.Add(pictureBox2);
//etc..

または、ここで提案されている方法を使用してフォーム内のすべてのPictureBoxオブジェクトを取得し、上で入力する手間を省くことができます。

次に、それらを繰り返し処理して、それらのTagプロパティを読み取ります。この場合、私はtrue彼らが座席を望んでいることを表現していましたが、それTagはオブジェクト型であるため、好きな型を使用できます。

foreach(PictureBox p in allPictureBoxes)
{        
    if((bool)p.Tag == true)
    {
       //seat wanted
    }
    else
    {
       //seat not wanted
    }
}

コメントから更新

void pictureBox_Click(object sender, EventArgs e)
{
   PictureBox pb = sender as PictureBox;
   if(pb != null)
      pb.Image = ArgyroCinema.Properties.Resources.seatred;     
}
于 2013-07-27T13:06:24.313 に答える