Adam S
Adam S

Reputation: 9235

Deciphering which control fired an event

I have an application with many images that all look the same and perform similar tasks:

<Image Grid.Column="1" Grid.Row="0" Name="image_prog1_slot0" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" MouseDown="image_prog1_slot0_MouseDown"/>
            <Image Grid.Column="1" Grid.Row="1" Name="image_prog1_slot1" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" />
            <Image Grid.Column="1" Grid.Row="2" Name="image_prog1_slot2" Stretch="Uniform" Source="bullet-icon.png" StretchDirection="Both" />

Now, I want to link each one to the same event handler:

private void image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //this_program = ???;
            //this_slot = ???;
            //slots[this_program][this_slot] = some value;
        }

Obviously the program number and slot number of the image are part of its name. Is there a way to extract this information when the event handler is fired?

Upvotes: 3

Views: 2249

Answers (1)

Venemo
Venemo

Reputation: 19067

Yes, it is possible.

As its name suggests, the sender parameter contains the object which fired the event.

You can also use the Grid's attached properties for convenience to determine which row and column it is in. (It is also possible to get other attached properties this way.)

private void image_MouseDown(object sender, MouseButtonEventArgs e)
{
    // Getting the Image instance which fired the event
    Image image = (Image)sender;

    string name = image.Name;
    int row = Grid.GetRow(image);
    int column = Grid.GetRow(image);

    // Do something with it
    ...
}

Side note:

You can also use the Tag property to store custom information about controls. (It can store any objects.)

Upvotes: 6

Related Questions