如何获得索引

时间:2012-11-30 14:17:45

标签: c# arrays picturebox indexof

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

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时,我的reservationForm将会打开,您可以在此处进一步填写详细信息以预订该表。

但是我现在遇到的部分是我在预订表单上不知道我点击了哪个PictureBox,所以我需要获得类似PictureBox数组的索引。< / p>

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:0)

检查发件人

private void mouseClick(object sender, EventArgs e)
{
    PicterBox pb = (PicterBox)sender;
    ...
}

答案 1 :(得分: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);

答案 2 :(得分: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)

答案 3 :(得分:0)

也许你可以在每个图片框中为周期设置一个等于相应索引的名称。所以在听众中你可以使用

  

PicterBox pb =(PicterBox)发件人;

并获取作为索引的名称。

答案 4 :(得分:0)

你有很多选择。我会建议其中一些:

  • 创建公共类变量或属性,并将当前选定的Picturebox存储在click事件中,以便您可以从表单中访问它;
  • 在Picturebox中传递表单的构造函数(创建一个接受此信息并将其存储在内部变量中的构造函数)。