如何更改 Windows 窗体链接标签的文本和链接
本文关键字:链接 文本 标签 Windows 窗体 何更改 | 更新日期: 2023-09-27 18:34:50
我只想有一个链接和整个文本可点击,并且两者都是动态设置的。我不知道如何更换它们。我尝试了下面的代码,当它被调用多次时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>
因为 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);
}