ハイパーリンクを表示できるLabelコントロールです。
型 | プロパティ | 内容 |
---|---|---|
LinkBehavior | LinkBehavior | リンクの動作
|
string | Text | LinkLabelで表示されるテキスト |
LinkCollection | Links | LinkLabel内に格納されているリンク (LinkLabel.Link) のコレクション
Textプロパティはその部分文字列ごとにリンクを設定できるため、それらのコレクション |
LinkArea | LinkArea | テキスト内でリンクとして処理される領域。Linksプロパティの最初の要素の領域。LinkArea.Startが先頭位置、LinkArea.Lengthが文字数を表す |
Color | LinkColor | 通常のリンクを表示するときに使用する色。既定の色はシステムで指定されている色であり、通常はColor.Blue |
Color | VisitedLinkColor | 以前にリンク先に移動したことのあるリンクを表示するときに使用する色。既定の色はシステムで指定されている色であり、通常はColor.Purple |
Color | ActiveLinkColor | アクティブなリンクを表示するために使用する色。既定の色はシステムで指定されている色であり、通常はColor.Red |
Color | DisabledLinkColor | 無効なリンクを表示するときに使用する色。既定値はEmpty |
bool | UseMnemonic | trueならば、「&」に続く文字がアクセスキーとなる |
リンクのコレクションを操作できます。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();
リンクが追加されたことを表すLinkLabel.LinkCollection.LinksAddedは、リンクが追加された時点でフラグが立てられるだけのため、追加したリンクを削除してもtrueのままとなります。 LinkLabel.LinkCollection.LinksAdded Property (System.Windows.Forms) | Microsoft Learn LinksAdded - LinkLabel.cs
アクセスキー (access key) はLabelと同様に、次のコントロールにフォーカスを合わせるように作用します。これをリンクのクリックとするにはLinkLabelを継承したクラスを作成し、ProcessMnemonic()をオーバーライドします。
protected override bool ProcessMnemonic(char charCode)
{
if (base.ProcessMnemonic(charCode))
{
if (Links.Count == 1)
{
Link link = 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プロパティの値が変化したとき |
左ボタン以外のクリックでも発生し、押されたボタンはLinkLabelLinkClickedEventArgs.Buttonで取得できます。
LinkLabel.LinkClicked イベント (System.Windows.Forms) | Microsoft Learn
private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { object obj = e.Link.LinkData; }