gpt4 book ai didi

c# - 如何更改 Windows 窗体 LinkLabel 的文本和链接

转载 作者:行者123 更新时间:2023-11-30 16:56:43 27 4
gpt4 key购买 nike

我希望只有一个链接和整个文本都可以点击,并且都可以动态设置。我不知道如何更换它们。我尝试了下面的代码,当它被多次调用时,我得到 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);
}

关于c# - 如何更改 Windows 窗体 LinkLabel 的文本和链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com