RichtextBox автоматически меняет направление текста на RightToLeft - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть LeftToRight RichTextBox.

Я перехватываю событие KeyUp и выполняю некоторые изменения с помощью SelectedText в RichTextBox.

Однако я выношу странныйвопрос.После замены SelectedText направление RichTextBox превращается в RightToLeft.

До CTRL + R

enter image description here

После

enter image description here

Вот мой код (только CTRL + R вызывает проблему):

    private void tbSource_KeyUp(object sender, KeyEventArgs e)
    {

        string appendTag, selectedText;
        appendTag = string.Empty;
        if (e.Control)
        {
            selectedText = tbSource.SelectedText;
            switch (e.KeyCode)
            {
                case Keys.U:
                    appendTag = @"<U>{0}</U>";
                    break;
                case Keys.B:
                    appendTag = @"<B>{0}</B>";
                    break;
                case Keys.R:
                    appendTag = @"<ruby>{0}<rt></rt></ruby>";
                    break;
                case Keys.T:
                    appendTag = @"(  )";
                    break;
                default:
                    appendTag = @"";
                    break;
            }

            if (e.KeyCode == Keys.U || e.KeyCode == Keys.B || e.KeyCode == Keys.R)
            {
                selectedText = string.Format(appendTag, selectedText);
                tbSource.SelectedText = selectedText;
            }
            else {
                tbSource.AppendText(appendTag);
            }    
        }           
    }

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

CTRL + R - это ярлык по умолчанию, который меняет направление на RightToLeft.Установите для свойства ShortcutsEnabled вашего RichtTextBox значение false.Для получения дополнительной информации об этой собственности перейдите здесь

0 голосов
/ 21 февраля 2019

WinForms RichTextBox имеет несколько предопределенных сочетаний клавиш, а CTRL + R - это то, которое изменяет направление текста на RightToLeft.

Вы можете установить для свойства ShortcutsEnabled значение false и удалить все сочетания клавиш (включая полезные, такие как CTRL + C и CTRL + V), или вы можете изменить свой код, задав свойство KeyEventArgs SuppressKeyPress.к истине.

Но вам нужно использовать обработчик событий KeyDown , а не KeyUp (я полагаю, что KeyUp слишком поздно, чтобы что-либо подавлять)

    private void tbSource_KeyDown(object sender, KeyEventArgs e)
    {
        .......
            case Keys.R:
                appendTag = @"<ruby>{0}<rt></rt></ruby>";
                e.SuppressKeyPress = true;
                break;
    }

Список сочетаний клавиш определен в документации для свойства ShortcutsEnabled

...