2010-03-27 40 views
3

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

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未处理”“未将对象引用设置为对象的实例。”有人知道发生了什么事吗?

回答

2

线

PictureBox pic = sender as PictureBox; 

集PIC为null,因为这是ContextMenuStrip的事件处理程序,而不是PictureBox

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

0

看起来像pic.Tag为null,所以.ToString强制执行异常。你应该这样做:

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

确保您在Form1_Load的someowhere设置标签的东西,如:

pic.Tag = someValue; 
+0

以前,我把这个值手动放在属性窗口中。现在,我尝试了编程,同样的事情。我仍然得到错误 – jello 2010-03-27 01:43:03

+0

检查约翰桑德斯的帖子。他在那里有正确的理由。 – Joel 2010-03-27 01:52:17