对于学校项目,我必须制作一个餐桌预订系统, 我做了以下(只是一小部分)。
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>
我该如何解决这个问题?
答案 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)
你有很多选择。我会建议其中一些: