Noberto Pessoa
Noberto Pessoa

Reputation: 125

C# - Click event sending a value

I'm using a for-loop to add values into an array of PictureBox and binding a click event to each one. I'm looking for a way of getting the data of a PictureBox after clicking on it. Since it's an array, I was thinking of sending the value of the loop counter, which would identify which one was clicked.

My code looks like this:

PictureBox[] picboxes = new PictureBox[result];
for (int i = 0; i < results; i++)
{
    picboxes[i] = new PictureBox();
    picboxes[i].ImageLocation = @FormIni.RetRes((i * 5) + 5 + i);
    picboxes[i].Click += new System.EventHandler(PictureBoxes_Click);
}

private void PictureBoxes_Click(object sender, EventArgs e)
{
    label1.Text = "here I need the value of the picboxes[i] image location";
}

It can seem stupid, but I thought of something like:

picboxes[i].Click += new System.EventHandler(PictureBoxes_Click(i))

and

private void PictureBoxes_Click(object sender, EventArgs e, int i)

In short: when I click in a PictureBox created in a array via code, how do I get its values (inside the click event handler)?

EDIT!

Sorry for finding it only after making this question, but I've found this solution and it may apply to my case, right?

Upvotes: 3

Views: 6055

Answers (3)

user3448824
user3448824

Reputation: 1

Use Tag

PictureBox[] picboxes = new PictureBox[result];
for (int i = 0; i < results; i++)
{
    picboxes[i] = new PictureBox();
    picboxes[i].Tag = (i+1).ToString();
    picboxes[i].ImageLocation = @FormIni.RetRes((i * 5) + 5 + i);
    picboxes[i].Click += new System.EventHandler(PictureBoxes_Click);
}

private void PictureBoxes_Click(object sender, EventArgs e)
{
    PictureBox p = (PictureBox)sender;
    string j = p.tag.tostring();
    label1.Text = j;
} 

Upvotes: 0

himadri
himadri

Reputation: 638

try do do this

PictureBox[] picboxes = new PictureBox[result];
for (int i = 0; i < results; i++)
{
    picboxes[i] = new PictureBox();
    picboxes[i].Name = (i+1).ToString();
    picboxes[i].ImageLocation = @FormIni.RetRes((i * 5) + 5 + i);
    picboxes[i].Click += new System.EventHandler(PictureBoxes_Click);
}

private void PictureBoxes_Click(object sender, EventArgs e)
{
    PictureBox p = (PictureBox)sender;
    string j = p.Name;
    label1.Text = j;
} 

Upvotes: 4

Jay Patel
Jay Patel

Reputation: 647

You can use the following (anoynomous method) lambda expression

 picboxes[i].Click += (sender, eventArguments) => PictureBoxes_Click(sender, eventArguments, i);

Upvotes: 0

Related Questions