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 に答える