0

对于一个学校项目,我必须做一个餐桌预订系统,我做了以下(只是一小部分)。

PictureBox[] pb = new PictureBox[70] { pictureBox1, pictureBox2, pictureBox3,etc..  };
foreach (PictureBox p in pb)
{
    p.BorderStyle = BorderStyle.Fixed3D;
    p.BackColor = Color.White;
    p.MouseEnter += new EventHandler(mouseOn);
    p.MouseClick += new MouseEventHandler(mouseClick);
}

private void mouseOn(object sender, EventArgs e)
{
    ((PictureBox)sender).BackColor = Color.Green;
}

private void mouseClick(object sender, EventArgs e)
{
    reservationForm rf = new reservationForm();
    rf.ShowDialog();
}

我选择了图片框来表示表格,默认BackColor为白色,当鼠标进入时BackColor变为绿色。

当您单击其中一个PictureBox我会打开的 esreservationForm时,您可以在此处进一步填写详细信息以预订餐桌。

但我现在卡住的部分是我不知道PictureBox我点击的预订表格,所以我需要得到类似PictureBox数组索引的东西。

我该如何解决?

4

5 回答 5

0

检查发件人

private void mouseClick(object sender, EventArgs e)
{
    PicterBox pb = (PicterBox)sender;
    ...
}
于 2012-11-30T14:20:08.447 回答
0

你知道怎么做!:)

您已经在mouseOn事件处理程序上正确执行了此操作。只需对sender参数进行相同的转换即可。

private void mouseClick(object sender, EventArgs e)
{
    PictureBox clickedBox = (PictureBox)sender;

    reservationForm rf = new reservationForm();
    rf.ShowDialog();
}

如果您需要索引,则可以使用Array.IndexOf,假设您的pb数组是类级别变量而不是本地方法。

int index = Array.IndexOf(pb, clickedBox);
于 2012-11-30T14:20:48.897 回答
0

在您的“MouseOn”中,您已经使用它(PictureBox)sender来获取对图片框的引用。然后,您可以遍历数组以将特定索引处的图片框与单击的图片框进行比较。当你有匹配时,你找到了索引。

var clicked = (PictureBox)sender;
int index = 0;
while (index < pb.Length && pb[index] != clicked) index = index+1;
// now index is either 70 (if not found) or the position you want (0..69)
于 2012-11-30T14:22:04.263 回答
0

也许你可以在每个图片框上设置一个循环名称,等于对应索引。所以在听众中你可以使用

PicterBox pb = (PicterBox)sender;

并获取作为索引的名称。

于 2012-11-30T14:26:13.967 回答
0

你有很多选择。我会推荐其中一些:

  • 创建一个公共类变量或属性,并将当前选中的Picturebox存储在点击事件上,这样就可以从表单中访问了;
  • 为表单的构造函数传入 Picturebox(创建一个接受此信息并将其存储在内部变量中的构造函数)。
于 2012-11-30T14:26:32.063 回答