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 存储在一个列表中并遍历它们。此外,当用户选择/取消选择座位时,更改TagPictureBox 的属性,因为此时您正在尝试将字符串与Image(picturebox11.Image 返回一个Image对象)进行比较。

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 回答