简体   繁体   中英

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 triple 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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM