RichTextBox невидимый выбираемый символ в конце строки - PullRequest
2 голосов
/ 17 октября 2011

При выделении текста в RichTextBox с помощью мыши или клавиш со стрелками + Shift я могу выбрать дополнительный пустой символ в конце строки.Для воспроизведения:

  • введите несколько символов (или вообще ничего) в RichTextBox

  • установите курсор на конец строки

  • удерживайте Shift и нажмите клавишу со стрелкой вправо

Появится узкое выделенное выделение, которое невозможно удалить.

Это вызывает проблему в моем приложении, потому что свойство SelectionFont возвращает ноль, когда дополнительный символ выбран вместе с некоторым допустимым текстом.Любые идеи о том, как отключить этот дополнительный символ или обойти его в противном случае?

c # winforms, visual studio 2010

Ответы [ 3 ]

0 голосов
/ 19 октября 2011

Интересно. (Это не Доктор Хаус, доктор медицины, говоря.)

Если в пустом элементе управления RTF ничего не выбрано, SelectedRtf возвращает:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055\uc1 }"

Когда материал «фантом» выбран в пустом элементе управления RTF, SelectedRtf возвращает:

"{\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\f0\fs17\par
}"

Конечно, SelectedText возвращает пустую строку в обоих случаях.

Так что я подозреваю, что выбрано metainfo, который гарантирует, что вновь введенный текст, который заменит пустой выбор, будет вставлен с правильным шрифтом .

Однако это кажется бессмысленным, поскольку вновь введенный текст будет вставлен с правильным шрифтом, даже если ничего не выбрано.

Так что все это не имеет смысла. (Ну, это так, вроде - см. Последний абзац)

Что заставляет меня верить, что это ошибка или, по крайней мере, сбой в RichTextBox.

Информация о форматировании, вероятно, создается процедурой выбора, которая гарантирует, что выбранный непустой текст будет заменен вновь набранным текстом, отформатированным в том же формате, что и текст, который он заменяет. Чтобы это работало, выделение всегда должно содержать информацию о форматировании, даже если текст не выделен. Я думаю. Возможно, можно каким-то образом предварительно выбрать форматирование символа и абзаца, отличное от заданного по умолчанию, а затем при наборе текста используется этот формат.

0 голосов
/ 19 октября 2011

Свойство SelectionFont для элемента управления RichTextBox может возвращать ТОЛЬКО один шрифт.Если выбранный диапазон содержит более одного шрифта, при чтении свойства SelectionFont будет получено NullReferenceException.

Скорее всего, происходит то, что свойство RichTextBox Font отличается от текущего шрифтавы используете на выбранном диапазоне.Этот «дополнительный» символ, выбранный в конце, является вашим Font свойством, а не вашим SelectionFont свойством.

Если ваш RichTextBox использует только один шрифт, просто убедитесь, что Font и *Свойства 1015 * одинаковы.

В противном случае просто проверьте, имеет ли оно значение null:

if (richTextBox1.SelectionFont != null) {
  //do something
}
0 голосов
/ 17 октября 2011

Я запустил новое приложение winforms в студии 2010 и не смог воспроизвести это. Я могу выбрать невидимого «персонажа», но это не вызывает у меня никаких проблем. SelectedFont все еще возвращает действительный объект для меня. Я могу получить текст без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...