سؤال

أنا أستخدم أ RichTextBox لعرض ملف RTF، والذي يتضمن ارتباطًا تشعبيًا واحدًا.نص الرابط ليس عنوان URL (الهدف يكون عنوان URL صالح).تم إنشاء RTF باستخدام Word.يتعرف كل من Word وWordPad على الروابط بشكل صحيح (لا يقوم WordPad بتشغيل الروابط، ولكنه يعرض مؤشر اليد المناسب).

عندما أقوم بتحميل RTF في ملف RichTextBox تظهر الروابط منسقة بشكل صحيح (باللون الأزرق وتحتها خط)، ولكن بدلاً من أن تتصرف كارتباط، عندما يتحرك المؤشر فوق الارتباط، يظل على شكل شعاع I، LinkClicked لن يتم إطلاق الحدث، وهو يظهر بالفعل الهدف بين قوسين زاوية بعد الارتباط (لا يبدو هذا صحيحًا).نظرًا لأن نص الرابط ليس عنوان URL، DetectUrls لا يساعد هنا.

هل هناك سبب لذلك RichTextBox لا يتعامل بشكل صحيح مع هذه الروابط، أو طريقة لجعلها تعمل كما هو متوقع؟

هنا هو الرمز.

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

لإعادة إظهار المشكلة، قم بإنشاء مستند RTF باستخدام Word (أنا أستخدم الإصدار 2000) يحتوي على رابط واحد نصه ليس عنوان URL ولكنه يستهدف عنوان URL صالحًا، ثم قم بتحميل ملف .rtf برمجيًا إلى ملف RichTextBox (أنا أستخدم .NET 2.0 في C# Express 2008).

هل كانت مفيدة؟

المحلول

لدعم الارتباطات التشعبية، تحتاج RICHEDIT50W نسخة من "التحرير الغني".

من أجل هذا:

  • إما أن تستخدم .NET Framework 4.7، الذي يستخدم RICHEDIT50W أصلا في RichTextBox.
  • في الإصدارات الأقدم من ‎.NET Framework، يمكنك التعديل RichTextBox ليستخدم RICHEDIT50W:

    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