3

我只想有一个链接,整个文本都可以点击并且都是动态设置的。我不知道如何更换它们。我尝试了下面的代码,当它被多次调用时,我得到了null pointer exception错误。

我尝试使用这个:

void setLink(string label, string link)
{
    linkLabel1.Text = label;

    if (linkLabel1.Links.Count > 0)
    {
        linkLabel1.Links.RemoveAt(0);
    }

    linkLabel1.Links.Add(0, label.Length, link);
}

这是这样调用的:

foreach(Foo f in fooArr) {
   setLink(f.name, f.url);
   // ... do something
} 

Foo是:

public class Foo
{
  public string name { get; set; }
  public string url { get; set;  }
}

并且fooArr只是List<Foo>

4

1 回答 1

2

因为LinkLabel.Links集合引用了超链接标签字符串的起始位置和长度,我相信如果集合中已经有多个链接LinkLabel.Links,链接到现有的Text. 当您替换文本并且仅替换第一个链接时,这意味着现有链接现在引用的字符串部分比新字符串长,并且/或者它可能会创建重叠链接。

linkLabel1.Text = "A really long link and I'm linking the last bit";
linkLabel1.Links.Add(0, 5, "www.removeme.com");
var longLength = linkLabel1.Text.Length;
linkLabel1.Links.Add(longLength - 5, longLength - 1, "endofstring.com");
setLink("short", "newlink.com"); // What about endofstring.com?

如果我理解正确,您希望每次都替换整个文本和所有链接,因此很容易解决此问题Links.Clear()以删除所有链接:

void setLink(string label, string link)
{
    linkLabel1.Text = label;
    linkLabel1.Links.Clear();
    linkLabel1.Links.Add(0, label.Length, link);
}
于 2014-12-20T06:49:57.397 回答