LinkLabel

ハイパーリンクを表示できるLabelコントロールです。

クラス階層

  • System.ComponentModel.Component
    • System.Windows.Forms.Control
      • System.Windows.Forms.Label
        • System.Windows.Forms.LinkLabel

プロパティ

プロパティ 内容
LinkBehavior LinkBehavior リンクの動作
  • SystemDefault … Internet Explorerの[インターネット オプション]の設定に依存
  • AlwaysUnderline … 常にリンクは下線付き
  • HoverUnderline … マウスがテキストの上にあるときだけ、リンクは下線付き
  • NeverUnderline … 下線なし
LinkCollection Links LinkLabel内に格納されているリンク (LinkLabel.Link) のコレクション

Textプロパティはその部分文字列ごとにリンクを設定できるため、それらのコレクション

LinkArea LinkArea テキスト内でリンクとして処理される領域。Linksプロパティの最初の要素の領域
Color LinkColor 通常のリンクを表示するときに使用する色。既定の色はシステムで指定されている色であり、通常はColor.Blue
Color VisitedLinkColor 以前にリンク先に移動したことのあるリンクを表示するときに使用する色
bool UseMnemonic trueならば、「&」に続く文字がアクセスキーとなる
     
プロパティ - LinkLabel クラス (System.Windows.Forms) | Microsoft Learn

Links

リンクのコレクションを操作できます。LinkLabel.Links プロパティ (System.Windows.Forms) | Microsoft Learn

linkLabel = new LinkLabel();
int count1 = linkLabel.Links.Count; // 1

linkLabel.Text = "012345";          // "012345"の範囲がリンクとなる
int count2 = linkLabel.Links.Count; // 1

linkLabel.Links.Add(1, 2);          // "12"の範囲だけがリンクとなる
linkLabel.Links.Add(4, 2);          // "45"の範囲にリンクが追加される
int count3 = linkLabel.Links.Count; // 2

文字列の長さを超えてリンクを設定すると、その範囲は無視されます。すでにリンクが設定されている範囲に重複して指定すると、「オーバーラップしたリンク部分です。」としてInvalidOperationExceptionが投げられます。

リンク数の上限

リンクは31個までしか追加できません。これが32個以上になると「オーバーフロー エラーです。」として、OverflowExceptionが投げられます。

linkLabel.Links.Clear();
linkLabel.Text = new String('A', 100);

for (int i = 0; i < 100; i++)
{
    linkLabel.Links.Add(i, 1); // iが31のときに、OverflowExceptionが投げられる
}

これはLinkLabel.CreateStringFormat()から呼び出される、StringFormat.SetMeasurableCharacterRanges()の制約によるものです。c# - More than 32 links in LinkLabel? - Stack Overflow

データの関連付け

リンクのコレクションのLink.LinkDataに情報を設定しておくと、LinkClickedイベントのハンドラでそれを取得できます。

linkLabel.Text = "0123456789";

linkLabel.LinkArea = new LinkArea(0, 2); // リンクの領域を"01"の範囲に設定
linkLabel.Links[0].LinkData = "A";       // リンクの領域に"A"という情報を付加

linkLabel.Links.Add(3, 2, "B"); // リンクの領域を"34"の範囲に設定し、"B"という情報を付加
linkLabel.Links.Add(6, 2, "C"); // リンクの領域を"67"の範囲に設定し、"C"という情報を付加

リンクの削除

LinkLabel.LinkCollection.Clear()で、すべてのリンクを削除できます。

linkLabel.Links.Clear();

UseMnemonic

アクセスキーはLabelと同様に、次のコントロールにフォーカスを合わせるように作用します。これをリンクのクリックとするにはLinkLabelを継承したクラスを作成し、ProcessMnemonic()をオーバーライドします。

protected override bool ProcessMnemonic(char charCode)
{
    if (base.ProcessMnemonic(charCode))
    {
        if (this.Links.Count == 1)
        {
            Link link = this.Links[0]; // リンクが複数設定されているならば、それを特定する必要がある
            OnLinkClicked(new LinkLabelLinkClickedEventArgs(link));
        }
        return true;
    }
    return false;
}
c# - Using keyboard shortcuts with LinkLabel controls - Stack Overflow

イベント

基本クラスであるLabelに対して、追加されたイベントは下表の2つです。

イベント 発生タイミング
LinkLabelLinkClickedEventHandler LinkClicked リンクがクリックされたとき。Clickイベントとは異なり、クリックされた位置のLinkLabel.Linkを取得できる
EventHandler TabStopChanged TabStopプロパティの値が変化したとき

LinkClicked

LinkLabel.LinkClicked イベント (System.Windows.Forms) | Microsoft Learn

private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    object obj = e.Link.LinkData;
}

LinkLabel.Linkクラス

プロパティ 内容
bool Enabled trueならば、リンクが有効。falseならばDisabledLinkColorの色となり、LinkClickedイベントが発生しなくなる
object LinkData リンクに関連付けられているデータ
     
プロパティ - LinkLabel.Link クラス (System.Windows.Forms) | Microsoft Learn
Microsoft Learnから検索