[VS2022]RichTextBox内のURLをクリックしてブラウザを開く[C#]

C#
カモノハシ部長
カモノハシ部長

まーさん、こういうのつくって欲しいんだけど

まーさん
まーさん

なんです?

カモノハシ部長
カモノハシ部長

アプリ上に情報を表示するエリアを作って、そこにテキスト情報を表示してほしい。情報にはURLが含まれてるから、当然そこをクリックしたらブラウザで表示ね

まーさん
まーさん

はーい(どうやるんだろ)

準備

TextBoxだとURLリンクができない気がするので、RichTextBoxを使う。”Form1.cs[デザイン]”にツールボックスから「RichTextBox」を配置ね。

配置したrichTextBox1を選択して、右下の「プロパティ」>「イベント」ボタン(稲妻アイコン)を押して、「LinkClicked」を見つけてダブルクリック。Form1.csに「richTextBox1_LinkClicked()」という関数が追加されます。これで準備が整ったので、コードを記述していきます。

コードを書いていくよ!

richTextBox1にテキストを足していくだけで良いので、こんな感じで。
“\r\n”を付けると改行してくれるので、一応付けてます。

 richTextBox1.Text += "表示するテキスト\r\n";  //"\r\n"を付けると改行する

テキストを加えたのは良いけど、追加し続けて表示範囲を超えると、追加したテキストが見えなくなってしまうので、自動で一番下までスクロールすることにします。

 richTextBox1.SelectionStart = richTextBox1.Text.Length;
 richTextBox1.Focus();
 richTextBox1.ScrollToCaret();

さて、テキスト中にURLが混ざっていた場合、勝手にアンダーラインが引かれ、URLであることがわかるようになています。(ラッキー)
あとは、URLをクリックしたときの処理!
それは、先程加えた「richTextBox1_LinkClicked()」が担当してくれるので、ブラウザを開く処理を記述します。

 private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
 {
    //URLを開く(.NET Coreの場合)
    Process.Start(new ProcessStartInfo
    {
        UseShellExecute = true, //デフォルトでfalseになってるのでtrueにする
        FileName = e.LinkText
    });
 }

昔の.NET Framework 時代は
 Process.Start(“https://ugokyaii.com”);
で動いたらしいけど、今(.NET Core)は例外が起きるので注意!

サンプルコード(抜き出し)

サンプルはこんな感じです。ボタンを押すと処理が始まるようにしました。

        private void button1_Click(object sender, EventArgs e)
        {
            //デフォルトだと行間が広いので狭くする
            //本来は、MainForm_Shown()内とかでやるほうが良いと思う
            richTextBox1.LanguageOption = RichTextBoxLanguageOptions.UIFonts;

            //スクロールさせるために多めに。
            writeText("ダミー");
            writeText("ダミー");
            writeText("ダミー");
            writeText("↓URLをクリックするとブラウザで表示されるよ");
            writeText("動きゃイイのさ:https://ugokyaii.com/");
        }

        /// <summary>
        /// richTextBox1にテキストを表示
        /// </summary>
        /// <param name="text">表示するテキスト</param>
        private void writeText(string text)
        {
            richTextBox1.Text += text + "\r\n";  //"\r\n"を付けると改行する

            //ついでに、今加えたテキストまでスクロールする
            richTextBox1.SelectionStart = richTextBox1.Text.Length;
            richTextBox1.Focus();
            richTextBox1.ScrollToCaret();
        }

        /// <summary>
        /// richTextBox1のプロパティで、「」をダブルクリックするとこの関数が追加されるよ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
        {
            //昔の.NET Framework 時代はこれで動いたらしいけど、今(.NET Core)は例外が起きるよ!
            //Process.Start(e.LinkText);

            //URLを開く(,NET Coreの場合)
            Process.Start(new ProcessStartInfo
            {
                UseShellExecute = true, //デフォルトでfalseになってるのでtrueにする
                FileName = e.LinkText
            });
        }

ダウンロード

コメント

タイトルとURLをコピーしました