【问题标题】:NullReferenceException with LinkLabel [closed]带有 LinkLabel 的 NullReferenceException [关闭]
【发布时间】:2013-01-10 23:47:12
【问题描述】:

这是一个伪问题。我可以强制链接在 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: Object reference not set to an instance of an object”。

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

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

【问题讨论】:

  • -1 Visual Studio 很棒(我应该知道,我现在又在使用 Eclipse).. 它很棒的一个原因是因为 VS 有一个很好的调试器;使用它。也就是说,在抛出异常时停止,然后检查数据/变量。我投了反对票,因为学习可用的工具将节省您(和我们)的时间,并会减少极端本地化问题数量增长的速度.. 可能不是很明显:(

标签: c# winforms nullreferenceexception linklabel


【解决方案1】:

问题大概出在e.Link.LinkData.ToString()

检查LinkData 不为空...

【讨论】:

  • 检查 null 是否只是防止异常发生...我正在寻找删除异常。
  • @TakoM。 - 这没有任何意义...你得到这个异常是因为你做错了什么,你试图访问一个空值。如果要访问 LinkData 并在其中包含数据,请确保不要通过手动更改 designer.cs 文件来填充它
  • 我可能应该提到我正在使用 VS 并让我的问题更清楚一些 - 错误显然在 e.Link.LinkData.ToString() 中,对我来说很明显它发生在哪里/为什么发生。然而,解决方案并不明显。这就是我一直在寻找的,也是 Eve 提供的。不过没问题。谢谢。
【解决方案2】:

我相信您的问题是您在自动生成的设计器文件中添加了链接。您无法预测 Visual Studio 何时会修改/重新创建它,以及它将有哪些变化。在我的情况下,您使用的相同语句被替换为:

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

解决方法很简单。地点:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多