我正在尝试创建一个包含8个picturebox的事件,这是我的代码,但当我单击它时,总是放入相同的图像,这个事件已经做了两次,我在picturebox的事件上放了一条消息,它出现了两次。
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;
}
} 发布于 2014-05-17 14:40:38
尝试使用内置函数刷新图片框。如果不能解决问题,请将picturebox图像属性设置为null,然后刷新并设置所需图像。
或者您尝试在ide的设计页面上设置单击事件,将其绑定到相同的函数(在本例中为Pictureboxes_click)。
发布于 2014-05-17 15:19:14
没有理由两次输入事件。您的代码实际上是有效的。我想你的窗体中可能还有其他一些使用相同事件的控件。只需确保该事件仅由图片框使用即可。
要做的另一件事是:在事件处设置断点,并查看哪些控件显示为发送者。这将帮助您解决您的问题。
使用图片框的标签属性来了解进入事件的是哪一个:
for (int i = 0; i < 9; i++)
{
PicBox[i].Tag = i;
}当代码进入事件时,您可以查看p.Tag以查看是哪一个触发了事件。
发布于 2014-05-20 21:48:31
对于单实例,您只有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();
}
}或者,您可以使用自动创建新实例的"FromFile"-method,替换克隆:
p.Image = Image.FromFile("Circulo1.png");https://stackoverflow.com/questions/23708297
复制相似问题