Нахождение индекса кликаемого изображения в динамически генерируемом массиве картинок - PullRequest
0 голосов
/ 30 марта 2020

У меня есть код, который создает строку из 5 коробок с картинками во время выполнения. Я добавил (я думаю) код для добавления обработчика события щелчка к каждой картинке во время ее создания.

int xPos = 95;                                                  
      for (int index = 0; index < 5; index++)                         
      {
        keepImage[index] = new PictureBox();                          
        keepImage[index].Width = 120;                                 
        keepImage[index].Height = 41;                     
        keepImage[index].Left = xPos;                      
        keepImage[index].Top = 360;

        keepImage[index].Click += new EventHandler(keepImage_Click);

        keepImage[index].BackColor = Color.Transparent;               
        keepImage[index].SizeMode = PictureBoxSizeMode.CenterImage;    
        this.Controls.Add(keepImage[index]);                          
        xPos += 125;                                                  
      }

Код работает - он создает и отображает картинки. Я искал здесь, чтобы узнать, как определить, на какой из ящиков с картинками щелкнули ...

public void keepImage_Click(object sender, EventArgs e)
    {
      PictureBox index = sender as PictureBox;
      // identify which button was clicked and perform necessary actions
      Debug.Write(index);
    }

Этот код был взят из решения, найденного здесь, но как мне адаптировать его для мои потребности? Я пытался, но пока не повезло. Во время выполнения отладка показывает System. Windows .Forms.PictureBox, SizeMode: CenterImage , но не фактический индекс.

Спасибо за любые предложения.

РЕДАКТИРОВАТЬ После попытки одного из решений, упомянутых в комментариях, я теперь получаю следующую ошибку ...

enter image description here

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете следовать второму подходу из Получить индекс массива picturebox нажатием . Но есть проблема с опечаткой с этим ответом, это должно быть (sender as PictureBox).

Так что в вашем случае вы можете использовать свойство Control.Tag для хранения индекса изображений как:

int xPos = 95;                                                  
for (int index = 0; index < 5; index++)                         
{
    //Other codes
    keepImage[index].Tag = index;  //Set tag from index 
    this.Controls.Add(keepImage[index]);                          
    xPos += 125;                                                  
}

Тогда событие клика будет выглядеть так:

public void keepImage_Click(object sender, EventArgs e)
{
    int index = int.Parse((sender as PictureBox).Tag.ToString());
    Debug.Write(index);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...