views:

190

answers:

2

I programmatically create a Picture Box in c# windows program. I assign it with a value for the Tag property. I would like to print out that tag number programmatically, just for test purposes. so I try this:

private void Form1_Load(object sender, EventArgs e)
{
    pic.ContextMenuStrip = contextMenuStrip1;
    pic.ContextMenuStrip.Click += new EventHandler(this.MyPicHandler);
}

void MyPicHandler(object sender, EventArgs e)
{
    PictureBox pic = sender as PictureBox;

    MessageBox.Show(pic.Tag.ToString());
}

But when I right-click on the picture, and click on the menu item, it gives me an exception. "A NullReferenceException was unhandled" "Object reference not set to an instance of an object.". anyone's got an idea what's going on?

A: 

Looks like pic.Tag is null so the .ToString is forcing the exception. You should do this:

if(pic.Tag != null)
    MessageBox.Show(pic.Tag.ToString());

Make sure you are setting tag to something someowhere, like in the Form1_Load:

pic.Tag = someValue;
Joel
well before, I put the value manually, in the properties window. now, I tried it programmatically, same thing. I still get the error
jello
check out John Saunders' post. He has the correct reason there.
Joel
+2  A: 

The line

PictureBox pic = sender as PictureBox;

sets pic to null, since this is an event handler for the ContextMenuStrip, and not for the PictureBox.

The sender parameter is a reference to the object you added the event handler to - that's the ContextMenuStrip.

John Saunders
i see. thank you
jello