数组picturebox事件在c#中单击

时间:2014-05-17 06:24:41

标签: c# winforms

我试图将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;


        }

    } 

3 个答案:

答案 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");