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】:您可以使用富文本框的SelectionStart
和SelectionLength
属性设置插入符号的位置。将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控件的滚动条跟随数据向下移动!