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

本文关键字:位置 保留 定位 插入 符号 光标 获取 | 更新日期: 2023-09-27 18:37:01

我目前在 .NET4 视窗表单应用程序。

我正在尝试制作类似智能感知的东西,但非常非常基本。

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

这样,当用户继续键入插入符号时,插入符号将保留在" "之间,如下所示:

Search "[usertypinghere][caretposition]"

我不确定如何获得插入符号的当前位置,更不用说如何将其保留在那里了。

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

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