2013-01-10 51 views
-3

這是一個僞問題。我可以強制鏈接在事件處理程序來打開所需的頁面,但我想知道我在這種情況下做錯了,做正確的方式:NullReferenceException與LinkLabel

在的InitializeComponent(),在partial class Form1

public void InitializeComponent() 
{ 
    this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 

    //... 

    // 
    // linkLabel1 
    // 
    this.linkLabel1.AutoSize = true; 
    this.linkLabel1.LinkArea = new System.Windows.Forms.LinkArea(0, 1); 
    this.linkLabel1.LinkColor = System.Drawing.Color.Red; 
    this.linkLabel1.Location = new System.Drawing.Point(259, 100); 
    this.linkLabel1.Name = "linkLabel1"; 
    this.linkLabel1.Size = new System.Drawing.Size(13, 17); 
    this.linkLabel1.TabIndex = 5; 
    this.linkLabel1.TabStop = true; 
    this.linkLabel1.Text = "?"; 

    /**/ 
    this.linkLabel1.Links.Add(1, 1, "www.google.com"); //This is the only code I have added manually. 
    /**/ 

    this.linkLabel1.UseCompatibleTextRendering = true; 
    this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkClicked); 

} 

//... 

private System.Windows.Forms.LinkLabel linkLabel1; 

的事件處理程序,LinkClicked,在public partial class Form1 : Form

private void LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
{ 
    System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); 
} 

當您單擊linkLabel1,你得到經典「的NullReferenceException:未將對象引用設置到對象的實例」當你調用System.Diag...

我還沒有太多的錯誤處理或vocab的培訓,所以這可能是希臘人對我來說。該按鈕不是靜態的...我應該創建一個...鏈接的新實例?

程序是否已創建實例?如果沒有,爲什麼.Size,.Name, .Text等工作...但不是.Links.Add?不知道我在說什麼。

+0

-1 Visual Studio真棒(我應該知道,我現在再次使用Eclipse),其中一個原因是它非常棒,因爲** VS有一個很好的調試器;用它**。也就是說,在拋出Exception時停止,然後*檢查*數據/變量。我給了downvote,因爲學習可用的工具將節省您(和我們)的時間,並且會降低極端本地化問題的數量增長的速度..也許不會那麼明顯如此:( – 2013-01-10 23:52:17

回答

1

我相信你的問題是,您要添加的自動生成的設計文件的鏈接。您無法預測Visual Studio何時會修改/重新創建它,以及它將進行何種更改。在我的情況下,您使用的語句被替換爲:

this.linkLabel1.LinkArea = new System.Windows.Forms.LinkArea(1, 1); 

解決方法非常簡單。地點:

this.linkLabel1.Links.Add(1, 1, "www.google.com"); 

在您的表格的Load事件中。另外,請確保從設計器區域中刪除由Visual Studio重構的所有不需要的代碼部分。

4

這個問題可能是在e.Link.LinkData.ToString()

檢查LinkData不爲空...

+0

檢查null是否僅僅阻止異常發生。我想要移除這個異常 –

+0

@TakoM。 - 這是沒有道理的......你得到這個異常是因爲你做錯了*,你試圖訪問一個空值如果你想訪問LinkData並有數據在裏面,請確保你沒有通過手動改變'designer.cs'文件來填充它 – Blachshma

+0

我可能應該提到我使用VS並且讓我的問題更清晰一些 - 錯誤顯然在'e .Link.LinkData.ToString()',對我來說,它明顯是在哪裏/爲什麼會發生。然而,這個解決方案並不明顯,這正是我所期待的,以及Eve提供的內容。 。 –