LinkLabel的NullReferenceException

时间:2013-01-10 23:47:13

标签: c# winforms nullreferenceexception linklabel

这是一个伪问题。我可以强制链接在EventHandler中打开所需的页面,但我想知道在这种情况下我做错了什么,并以正确的方式做到:

在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;

public partial class Form1 : Form中的EventHandler,LinkClicked:

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

当您单击linkLabel1时,在调用System.Diag...时会得到经典的“NullReferenceException:对象引用未设置为对象的实例”。

我没有接受过很多关于错误处理或词汇的培训,所以这对我来说也许是希腊语。该按钮不是静态的...我应该创建一个...链接的新实例吗?

程序是否已创建实例?如果没有,为什么.Size.Name.Text等工作......但不是.Links.Add?不知道我在说什么。

2 个答案:

答案 0 :(得分:4)

问题可能出在e.Link.LinkData.ToString()

检查LinkData是否为空...

答案 1 :(得分: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重构的所有代码中不需要的部分。