Array picturebox событие click в c #

1

Я пытаюсь сделать событие из 8 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;


        }

    } 
Теги:
winforms

3 ответа

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();
   }
}

Или вы можете заменить клонирование, используя "FromFile" -method, который автоматически создает новые экземпляры:

p.Image = Image.FromFile("Circulo1.png");
0

Нет причин вводить событие дважды. Ваш код действительно работает. Я думаю, может быть, у вас есть другие элементы управления в вашей форме, которые используют одно и то же событие. Просто убедитесь, что это событие используется только для изображений.

Другое дело: поставьте точку останова на событие и посмотрите, какие элементы управления отображаются в качестве отправителя. Это поможет вам решить вашу проблему.

Использовать свойство тегов "Изображения", чтобы понять, какой из них вводит событие:

for (int i = 0; i < 9; i++)
{
    PicBox[i].Tag = i;
}

Когда код вводится в событие, вы можете посмотреть p.Tag, чтобы узнать, какой из них вызвал событие.

0

Попробуйте обновить графические ящики со встроенной функцией. Если это не решит проблему, установите свойство imagebox изображения равным null, затем обновите и установите нужное изображение.

Или вы пытаетесь установить событие click на странице дизайна вашего ide, привяжите его к той же функции (в данном случае Pictureboxes_click)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню