简体   繁体   中英

Finding index of clicked image in a dynamically generated array of pictureboxes

I have code that creates a row of 5 pictureboxes at runtime. I have added (I think) the code to add a click event handler to each picturebox as it is created.

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

The code works - it creates and displays the pictureboxes. I have been looking on here to find out how to find which one of the pictureboxes is clicked on...

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

This code was taken from a solution found on here, but how do I adapt it for my needs? I have tried but so far, no luck. At runtime the debug shows System.Windows.Forms.PictureBox, SizeMode: CenterImage but not the actual index.

Thanks for any suggestions.

EDIT After trying one of the solutions mentioned in the comments, I now get the following error...

在此处输入图片说明

You can follow second approach from Get the index of array of picturebox clicked . But there is a typo issue with this answer it should be (sender as PictureBox) .

So in your case, you can use Control.Tag property to store index of pictures as:

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

Then click event would be like:

public void keepImage_Click(object sender, EventArgs e)
{
    int index = int.Parse((sender as PictureBox).Tag.ToString());
    Debug.Write(index);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM