3

我以编程方式在 c# windows 程序中创建了一个图片框。我为 Tag 属性分配了一个值。我想以编程方式打印出该标签号,仅用于测试目的。所以我试试这个:

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

但是当我右键单击图片并单击菜单项时,它给了我一个例外。“未处理 NullReferenceException”“未将对象引用设置为对象的实例。”。有人知道发生了什么吗?

4

2 回答 2

2

线

PictureBox pic = sender as PictureBox;

将 pic 设置为 null,因为这是 的事件处理程序ContextMenuStrip,而不是PictureBox.

sender参数是对您将事件处理程序添加到的对象的引用 - 这就是ContextMenuStrip.

于 2010-03-27T01:47:30.590 回答
0

看起来 pic.Tag 为空,因此 .ToString 正在强制异常。你应该做这个:

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

确保您将标记设置为某处,例如在 Form1_Load 中:

pic.Tag = someValue;
于 2010-03-27T01:40:14.940 回答