NullReferenceException with LinkLabel

本文关键字:LinkLabel with NullReferenceException | 更新日期: 2023-09-27 17:51:13

这是一个伪问题。我可以在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;

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

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

当你点击linkLabel1时,当你调用System.Diag...时,你会得到经典的"NullReferenceException: Object reference not set to a instance of a Object"。

我没有接受过太多错误处理或词汇方面的培训,所以这对我来说可能是希腊语。按钮不是静态的……我应该创建一个…链接的新实例?

程序不是已经创建了一个实例吗?如果不是,为什么.Size, .Name, .Text等工作…但不是.Links.Add ?不知道我在说什么

NullReferenceException with LinkLabel

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

检查LinkData是否为空

我认为您的问题在于您在自动生成的设计器文件中添加了链接。你无法预测什么时候Visual Studio会修改/重新创建它,以及它会有什么变化。在我的例子中,您使用的相同语句被替换为:

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

解决方法很简单。:

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

在表单的Load事件中。还要确保从设计器区域中删除所有已被Visual Studio重构的代码中不需要的部分。