获取插入符号/光标位置并将其保留在特定位置

时间:2012-06-11 22:07:05

标签: c# position caret autofill

我目前使用的是.NET4 Windows窗体应用程序。

我正在尝试制作类似intellisense的东西,但非常基本。

让我们假设用户正在关注RichTextBox,并键入以下内容: Search。在这个特定的短语之后,我希望它像这样“自动填充”:Search ""并将插入符号放在“”之间。

当用户继续输入插入符号时,就像这样:“

Search "[usertypinghere][caretposition]"

我不确定如何获得插入符号的当前位置,更不用说如何保留它。

1 个答案:

答案 0 :(得分:1)

这是SelectionStart快乐是TextBoxBase的一部分,所以你可以在TextBoxRichTextBoxMaskedTextBox或其他人的自定义衍生品中获得它。您需要订阅TextChanged事件以观看“搜索”,然后在自动填充后设置SelectionStart,然后订阅SelectionChangedEvent以防止SelectionStart转向关闭。

哦,如果你有几个关键字,你会希望将这些关键字组合成Dictionary Tuples private void richTextBox1_TextChanged(object sender, EventArgs e) { if (richTextBox1.Text == "Search") { richTextBox1.Text = "Search \"\""; richTextBox1.SelectionStart = richTextBox1.TextLength - 1; } } private void richTextBox1_SelectionChanged(object sender, EventArgs e) { if (richTextBox1.Text.StartsWith("Search \"") && richTextBox1.Text.EndsWith("\"")) { if (richTextBox1.SelectionStart > richTextBox1.TextLength - 1) { richTextBox1.SelectionStart = richTextBox1.TextLength - 1; } if (richTextBox1.SelectionStart <= "Search \"".Length) { richTextBox1.SelectionStart = "Search\"".Length+1; } } } 来概括方法。

EDIT 我的测试代码。没有闪烁,没有压倒一切的控件。只是简单的事件订阅者

{{1}}