C # Forms RichTextBox установить / изменить цвет подчеркивания (\ ulcN) и стиль подчеркивания (например, \ ulwave) для выбора - PullRequest
0 голосов
/ 14 июня 2019


Я сделал свое расширенное текстовое поле уже принимающим теги \ ulc N и стиль ul (например, \ ulwave, \ ulth ...), но я не мог понять, как установить их через код для выбранного текст (например: richTextBox.SelectionFont = someFont; для шрифта). Я уже пытался изменить свойства Rtf и SelecedRtf в richTextBox напрямую, но не смог заставить его работать должным образом.

Я думаю о двух методах, таких как:

    static void SetSelectionUnderlineColor (this RichTextBox richTextBox, Color color)
    static void SetSelectionUnderlineStyle (this RichTextBox richTextBox, 
                                            UnderLineStyle style)

, который затем устанавливает цвет / стиль подчеркивания для текущего выделенного текста в поле расширенного текста. Метод SetSelectionUnderlineColor, возможно, также должен добавить новый цвет в таблицу цветов в поле расширенного текста.

Пример:

    richTextbox = new RichEdit50(); //Used code for RichEdit50 class below

    richTextbox.Text = "Test\nTest2";

    richTextbox.Select(0, 2);
    richTextbox.SetSelectionUnderlineStyle(UnderLineStyle.Wave);
    richTextbox.SetSelectionUnderlineColor(Color.Red);

    richTextbox.Select(5, 2);
    richTextbox.SetSelectionUnderlineStyle(UnderLineStyle.Thick);
    richTextbox.SetSelectionUnderlineColor(Color.Green);

    richTextbox.Select(7, 3);
    richTextbox.SetSelectionUnderlineStyle(UnderLineStyle.Continuous);

    richTextbox.Select(richTextbox.Text.Length, 0);

Должен показать что-то вроде этого: Ожидаемый результат

В настоящее время я использую следующий код для создания расширенного текстового поля, которое поддерживает тег \ ulc N для изменения цвета подчеркивания:

    public class RichEdit50 : RichTextBox
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr LoadLibrary (string lpFileName);

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams prams = base.CreateParams;
                if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
                {
                    prams.ClassName = "RICHEDIT50W";
                }
                return prams;
            }
        }
    }

Заранее спасибо за помощь!

...