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

なんです?

アプリ上に情報を表示するエリアを作って、そこにテキスト情報を表示してほしい。情報には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
});
}
コメント