RichTextBox for WPF
ハイパーリンク
RichTextBox for WPF の使い方 > ハイパーリンク

C1RichTextBox は、ハイパーリンクをサポートします。通常の HTML ドキュメントと同様に、この機能によってドキュメントの特定の部分をアクティブ化できます。ユーザーがハイパーリンクをクリックすると、アプリケーションは通知を受け取り、何らかのアクションを実行します。

次のコードに、ハイパーリンクを作成する方法を示します。

コードのコピー
Public Sub New()
   InitializeComponent()
  ' テキストを設定します
   _rtb.Text = "This is some text with a hyperlink in it."
   ' ハイパーリンクを作成します
   Dim pos As Integer = _rtb.Text.IndexOf("hyperlink")
   _rtb.[Select](pos, 9)
  Dim uri = New Uri("https://www.grapecity.co.jp/developer/", UriKind.Absolute)
   _rtb.Selection.MakeHyperlink(uri)
   ' ナビゲーション要求を処理します
   _rtb.NavigationMode = NavigationMode.OnControlKey
   AddHandler _rtb.RequestNavigate, AddressOf _rtb_RequestNavigate;
End Sub
コードのコピー
public MainPage()
{
  InitializeComponent();
  // テキストを設定します
  _rtb.Text = "This is some text with a hyperlink in it.";
  // ハイパーリンクを作成します
  int pos = _rtb.Text.IndexOf("hyperlink");
  _rtb.Select(pos, 9);
  var uri = new Uri("https://www.grapecity.co.jp/developer/", UriKind.Absolute);
  _rtb.Selection.MakeHyperlink(uri);
  // ナビゲーション要求を処理します
  _rtb.NavigationMode = NavigationMode.OnControlKey;
  _rtb.RequestNavigate += _rtb_RequestNavigate;
}

このコードは、最初に C1RichTextBox にテキストを割り当てます。次に、"hyperlink" という単語を選択し、MakeHyperlink メソッドを呼び出してハイパーリンクにします。パラメータは、新しいハイパーリンクの NavigateUri プロパティに割り当てられる URI です。

その後に、NavigationMode プロパティを設定して、ハイパーリンクの上にマウスポインタが置かれたときに C1RichTextBox がそれを処理する方法を決定します。デフォルトの動作は Microsoft Word と Visual Studio と同じで、[Ctrl]キーを押しながらハイパーリンクの上にマウスを移動すると、カーソルが手のアイコンに変化し、[Ctrl]キーを押しながらクリックすると、RequestNavigate イベントが発生します。これにより、ユーザーはハイパーリンクのテキストを通常のテキストと同様に編集できます。

RequestNavigate イベントハンドラは、ハイパーリンクナビゲーションを処理します。多くの場合、これには、新しいブラウザウィンドウを開き、別の URL に移動することが必要です。以下に例を示します。

コードのコピー
Private Sub _rtb_RequestNavigate(sender As Object, e As RequestNavigateEventArgs)
   ' リンクを新しいウィンドウで開きます("_self" を指定すると現在のウィンドウが使用されます)
   Dim target As String = "_blank"
   System.Windows.Browser.HtmlPage.Window.Navigate(e.Hyperlink.NavigateUri, target)
End Sub
コードのコピー
void _rtb_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
  // リンクを新しいウィンドウで開きます("_self" を指定すると現在のウィンドウが使用されます)
  string target = "_blank";
   System.Windows.Browser.HtmlPage.Window.Navigate(e.Hyperlink.NavigateUri, target);
}

ハイパーリンクのアクションは、URI ナビゲーションに限定されません。一連のカスタム URI アクションをアプリケーション内でコマンドとして使用するように定義することもできます。RequestNavigate ハンドラで、これらのカスタム URI を解析して処理します。たとえば、次のコードは、ハイパーリンクを使用してメッセージボックスを表示します。

コードのコピー
Public Sub New()
   InitializeComponent()
   ' テキストを設定します
   _rtb.Text = "ハイパーリンクに指定する任意テキスト"
  ' ハイパーリンクを作成します
   Dim pos As Integer = _rtb.Text.IndexOf("hyperlink")
   _rtb.[Select](pos, 9)
   Dim uri = New Uri("msgbox:Thanks for clicking!")
   _rtb.Selection.MakeHyperlink(uri)
  ' ナビゲーション要求を処理します
   _rtb.NavigationMode = NavigationMode.OnControlKey
   AddHandler _rtb.RequestNavigate, AddressOf _rtb_RequestNavigate
End Sub
Private Sub _rtb_RequestNavigate(sender As Object, e As RequestNavigateEventArgs)
   Dim uri As Uri = e.Hyperlink.NavigateUri
   If uri.Scheme = "msgbox" Then
       MessageBox.Show(uri.LocalPath)
   End If
End Sub
コードのコピー
public MainPage()
{
  InitializeComponent();
  // テキストを設定します
  _rtb.Text = "This is some text with a hyperlink in it.";
  // ハイパーリンクを作成します
  int pos = _rtb.Text.IndexOf("hyperlink");
  _rtb.Select(pos, 9);
  var uri = new Uri("msgbox:Thanks for clicking!");
  _rtb.Selection.MakeHyperlink(uri);
  // ナビゲーション要求を処理します
  _rtb.NavigationMode = NavigationMode.OnControlKey;
  _rtb.RequestNavigate += _rtb_RequestNavigate;
}
void _rtb_RequestNavigate(object sender, RequestNavigateEventArgs e)
  {
   Uri uri = e.Hyperlink.NavigateUri;
   if (uri.Scheme == "msgbox")
  {
   MessageBox.Show(uri.LocalPath);
  }
}

MakeHyperlink コード内の変更点は、URI を作成する行だけです。RequestNavigate ハンドラは、URI メンバを使用してコマンドと引数を解析します。このテクニックを使用すると、たとえば埋め込みメニューを含むドキュメントを作成できます。

CreateHyperlink メソッドは、ドキュメント内の既存の部分をハイパーリンクに簡単迅速に変更する方法にすぎません。C1Hyperlink 要素を C1Document オブジェクトに追加して、ハイパーリンクを作成することもできます。これについては、後のセクションで説明します。