我试图将8个图片框的事件放在一起这是我的代码,但是当我点击它时总是放置相同的图像,事件一直在做两次,我在图片盒的事件上放了一条消息,它出现了两次。
public partial class Form1 : Form
{
int jug=1;
PictureBox[] PicBox = new PictureBox[9];
Image circu = Image.FromFile("Circulo1.png");
Image cruz = Image.FromFile("Cruz1.png");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
PicBox[0] = this.pcb0;
PicBox[1] = this.pcb1;
PicBox[2] = this.pcb2;
PicBox[3] = this.pcb3;
PicBox[4] = this.pcb4;
PicBox[5] = this.pcb5;
PicBox[6] = this.pcb6;
PicBox[7] = this.pcb7;
PicBox[8] = this.pcb8;
for (int i = 0; i < 9; i++)
{
PicBox[i].Click += new System.EventHandler(PictureBoxes_Click);
}
}
private void PictureBoxes_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;
if (jug == 1)
{
jug = 2;
p.Image = cruz;
}
else
{
jug = 1;
p.Image = circu;
}
}
答案 0 :(得分:0)
尝试使用内置功能刷新图片框。如果这不能解决问题,请将picturebox image属性设置为null,然后刷新并设置所需的图像。
或者您尝试在ide的设计页面上设置click事件,将其绑定到相同的功能(在本例中为Pictureboxes_click)
答案 1 :(得分:0)
没有理由两次进入赛事。你的代码确实有效。我想也许你的表单中有一些其他控件使用相同的事件。只需确保该事件仅由图片框使用。
要做的另一件事:在事件中放置断点并查看哪些控件显示为发件人。这有助于您解决问题。
使用pictureboxes的Tag属性来了解哪一个正在进入该事件:
for (int i = 0; i < 9; i++)
{
PicBox[i].Tag = i;
}
当代码进入活动时,您可以查看 p.Tag 以查看哪一个触发了该活动。
答案 2 :(得分:0)
单个实例只有2个不同的图像。尝试克隆图像,以便每个PictureBox获取它自己的图像实例:
private void PictureBoxes_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;
if (jug == 1)
{
jug = 2;
p.Image = (Image)cruz.Clone();
}
else
{
jug = 1;
p.Image = (Image)circu.Clone();
}
}
或者您可以使用&#34; FromFile&#34; -method替换克隆,该方法会自动创建新实例:
p.Image = Image.FromFile("Circulo1.png");