質問

RichTextBox を使用して、単一のハイパーリンクを含むRTFファイルを表示しています。リンクテキストはURLではありません(ターゲットは有効なURLです )。 RTFはWordで作成されました。 Wordとワードパッドの両方がリンクを適切に認識します(ワードパッドはリンクを起動しませんが、適切なハンドカーソルを表示します)。

RTFを RichTextBox にロードすると、リンクは正しくフォーマットされているように見えます(青と下線付き)が、リンクのように動作するのではなく、カーソルがリンク上を移動してもIビームのままです、 LinkClicked イベントは発生せず、リンクの後に山括弧で囲まれたターゲットを実際に表示します(これは正しくないと思われます)。リンクテキストはURLではないため、 DetectUrls はここでは役に立ちません。

RichTextBox がこれらのリンクを適切に処理しない理由、または期待どおりにリンクを機能させる方法はありますか?

コードは次のとおりです。

TipView.Rtf = tips[tipIndex];
// I've also tried TipView.LoadFile, with identical result

問題を再現するには、テキストはURLではなく有効なURLをターゲットとする1つのリンクを含むWord(2000を使用しています)でRTFドキュメントを作成し、.rtfファイルを RichTextBox (C#Express 2008で.NET 2.0を使用しています)。

役に立ちましたか?

解決

ハイパーリンクをサポートするには、 <が必要です。 code> RICHEDIT50W &quot; rich edit&quot; のバージョン。

そのために:

  • いずれも.NET Framework 4.7を使用します。これは RichTextBox RICHEDIT50W をネイティブに使用します。
  • .NET Frameworkの古いバージョンでは、 RICHEDIT50W を使用するように RichTextBox を変更できます:

    public class ExRichText : RichTextBox
    {
        [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW",
                   CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern IntPtr LoadLibraryW(string s_File);
    
        protected override CreateParams CreateParams
        {
            get
            {
                var cp = base.CreateParams;
                LoadLibraryW("MsftEdit.dll");
                cp.ClassName = "RichEdit50W";
                return cp;
            }
        }
    }
    

RichTextBox選択ハイライトおよび RichTextBoxは、Unicode数学英数字記号を表示できません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top