Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改Windows窗体链接标签的文本和链接_C#_Winforms_Linklabel - Fatal编程技术网

C# 如何更改Windows窗体链接标签的文本和链接

C# 如何更改Windows窗体链接标签的文本和链接,c#,winforms,linklabel,C#,Winforms,Linklabel,我想只有一个链接和整个文本可点击,并动态设置。我不知道如何更换它们。我尝试了下面的代码,当它多次被调用时,我得到了null指针异常error 我试着用这个: void setLink(string label, string link) { linkLabel1.Text = label; if (linkLabel1.Links.Count > 0) { linkLabel1.Links.RemoveAt(0); } linkL

我想只有一个链接和整个文本可点击,并动态设置。我不知道如何更换它们。我尝试了下面的代码,当它多次被调用时,我得到了
null指针异常
error

我试着用这个:

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
只是
列表

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

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?
如果我理解正确,您希望每次都替换整个文本和所有链接,因此可以使用
链接轻松解决此问题。清除()
删除所有链接:

void setLink(string label, string link)
{
    linkLabel1.Text = label;
    linkLabel1.Links.Clear();
    linkLabel1.Links.Add(0, label.Length, link);
}

甚至不需要检查
if
,而且
Clear()
RemoveAt()
(在该上下文中)要好得多。谢谢FWIW:LinkLabel实现确实防止了重叠链接,但使用的逻辑可能不是您想要的或期望的。