2010-03-27 38 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