RichTextBox C# 设置插入符号位置 winforms

Posted

技术标签:

【中文标题】RichTextBox C# 设置插入符号位置 winforms【英文标题】:RichTextBox C# Set caret location winforms 【发布时间】:2011-06-22 14:20:16 【问题描述】:

我正在构建一个聊天应用程序,用户将其文本输入到富文本框中。

在富文本框中有一个初始文本,上面写着:“我:”。

现在,当用户按下主页按钮时,我希望插入符号位于“Me:”字符串之后。因此对于 Shift+Home 组合或三次鼠标单击或 Ctrl + 左光标等。

有什么办法吗?

我已经试过了

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetCaretPos(int X, int Y);

提前致谢, 盎司。

【问题讨论】:

【参考方案1】:

您可以使用富文本框的SelectionStartSelectionLength 属性设置插入符号的位置。将SelectionLength 设置为0,然后将SelectionStart 设置为您希望插入符号出现的位置。

SelectionStart 的文档说:

如果控件中没有选择文本,则此属性指示新文本的插入点或插入符号。


Win32 API 函数SetCaretPos 的级别太低,无法满足您的需求。

【讨论】:

【参考方案2】:

Winforms:RichTextBox.SelectionStart & 将 RichTextBox.SelectionLength 设置为 0。

WPF:RichTextBox.CaretPosition

【讨论】:

感谢宽限期,现在看来我复制了您的答案! ;-) 确实哈哈,我编辑完看到你已经发了。【参考方案3】:

使用Select 方法:

public void Select(
    int start,
    int length
)

richTextBoxUserText.Select(richTextBoxUserText.TextLength, 0);

【讨论】:

【参考方案4】:
RichTextBox1.SelectionStart = Pos;
RichTextBox1.SelectionLength = 0;
RichTextBox1.ScrollToCaret();

【讨论】:

【参考方案5】:

发现它在属性 SelectionProtected 上搜索

richTextBoxUserText.Text = INITIAL_TEXT;
richTextBoxUserText.SelectAll();
richTextBoxUserText.SelectionColor = Color.Red;
richTextBoxUserText.SelectionProtected = true;
richTextBoxUserText.SelectionLength = 0;
richTextBoxUserText.SelectionStart = richTextBoxUserText.TextLength + 1;

【讨论】:

@David,保护文本不被删除的解决方案是使用 SelectionProtected 属性。为了防止用户选择它,需要额外的工作......你在哪里告诉我这个? @os 您在原始问题的任何地方都没有提到保护文本。另外,我很确定 'richTextBoxUserText.SelectionStart = richTextBoxUserText.TextLength + 1' 会抛出一个超出范围的异常。 @David 是的,我没有提到,因为我不知道......而且它不会抛出 @oz 很抱歉我没有提到保护,但我没有看到你问题的那一部分。 "如果您将此属性设置为超出控件中文本长度的位置,则选择开始位置将放在最后一个字符之后。" - 这解释了它......你的草率编码得到了补偿! :)

以上是关于RichTextBox C# 设置插入符号位置 winforms的主要内容,如果未能解决你的问题,请参考以下文章

如何在不选择 RichTextBox 的情况下恢复插入符号位置或更改文本颜色

C#中,richTextBox中,如何固定好插入进来图片的位置。固定死!!(比如一定要放在中间最上面,咋整呢)

C#中怎样让richTextBox控件的滚动条跟随数据向下移动!

C#中,如何让richTextBox旁边的滚动条始终处于最下方

如何在 RichTextBox 中隐藏插入符号?

WPF RichTextBox 将插入符号定位到具有给定索引的可见字符