jayarr
jayarr

Reputation: 31

RichTextBox invisible selectable character at end of string

When selecting text in a RichTextBox using the mouse, or arrow keys + shift, I can select an extra blank character at the end of the string. To reproduce:

You'll see a narrow highlighted selection appear, which cannot be deleted.

This causes a problem in my application because the SelectionFont property returns null when the extra character is selected along with some valid text. Any ideas on how to disable this extra character, or work around it otherwise?

c# winforms, visual studio 2010

Upvotes: 3

Views: 1648

Answers (3)

LarsTech
LarsTech

Reputation: 81675

The SelectionFont property for the RichTextBox control can ONLY return a single font. If the selected range contains more than one font, reading the SelectionFont property will throw a NullReferenceException.

Most likely what is happening is that the RichTextBox Font property is different than the current font you are using on the selected range. That "extra" character selected at the end is your Font property, not your SelectionFont property.

If your RichTextBox is just using a single font, just make sure the Font and SelectionFont property are the same.

Otherwise, just check if it's null:

if (richTextBox1.SelectionFont != null) {
  //do something
}

Upvotes: 0

Mike C
Mike C

Reputation: 1

FIred up a new winforms app in studio 2010 and wasn't really able to reproduce this. I can select the invisible 'character' but it doesn't cause me any problems. SelectedFont still returns a valid object for me. I can get the text without issue.

Upvotes: 0

TheBlastOne
TheBlastOne

Reputation: 4320

Interesting. (This is not Dr House, MD, speaking.)

When nothing is selected in an empty RTF edit control, SelectedRtf returns:

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

When the "phantom" stuff is selected in the empty RTF edit control, SelectedRtf returns:

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

Of course, SelectedText returns the empty string in both cases.

So I suspect what is selected is the metainfo that makes sure that newly entered text that would replace the empty selection will be inserted with the correct font.

However, that seems to be nonsense since newly entered text will be inserted with the correct font even if nothing is selected.

So all that does not make sense. (Well, it does, kind of -- see last paragraph)

Which makes me believe this is a bug, or at least a glitch, in RichTextBox.

The formatting info is probably created by the selection routine which makes sure that selected non-empty text will be replaced by the newly typed text formatted in the same format as the text it replaces. For this to work, a selection must always contain the formatting info, even if no text is selected. I think. Maybe one can pre-select a char and paragraph formatting different from the default one, somehow, and then typing text uses that format.

Upvotes: 0

Related Questions