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
?不知道我在说什么
问题可能出在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重构的代码中不需要的部分。