繁体   English   中英

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

[英]Getting the caret/cursor position and keeping it at a specific spot

我目前在.NET4 Windows窗体应用程序中。

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

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

这样,当用户继续输入时,插入记号将停留在“”之间,如下所示:

Search "[usertypinghere][caretposition]"

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

这是SelectionStart 有趣的是它是TextBoxBase的一部分,因此您可以在TextBoxRichTextBoxMaskedTextBox甚至其他自定义派生工具中使用它。 您需要订阅TextChanged事件以观看“搜索”,然后在自动填充后在其中设置SelectionStart ,然后订阅SelectionChangedEvent以防止SelectionStart偏离目标。

哦,如果您有几个关键字,则需要在“ Tuples Dictionary中结合使用这些关键字来概括这些方法。

编辑我的测试代码。 没有闪烁,没有覆盖控件。 普通事件订阅者

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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