这是一个伪问题。我可以强制链接在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
?不知道我在说什么。
答案 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重构的所有代码中不需要的部分。