RichTextBox C# Set caret location winforms
I am building a chat application where the user enters its text to a richtextbox.
In the rich text box there is an initial text which says: "Me: ".
Now, when the user press the Home button I want the caret to be located after the "Me: " string. So for Shift+Home combination or for tripl开发者_StackOverflowe mouse click or for Ctrl + left cursor etc..
Any way it can be done?
I've already tried
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetCaretPos(int X, int Y);
thanks in advance, Oz.
You can set the caret position with the SelectionStart
and SelectionLength
properties of the rich text box. Set SelectionLength
to 0 and then set SelectionStart
to the location where you want the caret to appear.
The documentation for SelectionStart
says:
If no text is selected in the control, this property indicates the insertion point, or caret, for new text.
The Win32 API function SetCaretPos
is much too low level for your needs.
Winforms: RichTextBox.SelectionStart & set RichTextBox.SelectionLength to 0.
WPF: RichTextBox.CaretPosition
Use the Select method:
public void Select(
int start,
int length
)
richTextBoxUserText.Select(richTextBoxUserText.TextLength, 0);
RichTextBox1.SelectionStart = Pos;
RichTextBox1.SelectionLength = 0;
RichTextBox1.ScrollToCaret();
Found it googling on the property SelectionProtected
richTextBoxUserText.Text = INITIAL_TEXT;
richTextBoxUserText.SelectAll();
richTextBoxUserText.SelectionColor = Color.Red;
richTextBoxUserText.SelectionProtected = true;
richTextBoxUserText.SelectionLength = 0;
richTextBoxUserText.SelectionStart = richTextBoxUserText.TextLength + 1;
精彩评论