C# 如何知道插入符号在文本框(TextBlock)中的当前位置以编程方式选择某个单词

C# 如何知道插入符号在文本框(TextBlock)中的当前位置以编程方式选择某个单词,c#,wpf,textbox,location,caret,C#,Wpf,Textbox,Location,Caret,例如,在文本框(TextBlock)C#WPF中键入时 美丽的自然 漂亮的u(在这里,在键入nature之前,我想知道插入符号当前位置的索引。假设“u”下划线现在正在闪烁插入符号) 我试图实现的是通过按下LeftShift按钮来设置选择的起始位置,并通过按下RightShift按钮来设置结束位置 这样我就可以在文本框中以编程方式选择要在某处使用的最新(最近)的单个单词 我用下面的简单代码尝试了几种方法,但都失败了,在互联网上也没有类似的例子 或者,作为更好的解决方案,是否有人知道这样一种方法:在

例如,在文本框(TextBlock)C#WPF中键入时

美丽的自然

漂亮的u(在这里,在键入nature之前,我想知道插入符号当前位置的索引。假设“u”下划线现在正在闪烁插入符号)

我试图实现的是通过按下LeftShift按钮来设置选择的起始位置,并通过按下RightShift按钮来设置结束位置 这样我就可以在文本框中以编程方式选择要在某处使用的最新(最近)的单个单词

我用下面的简单代码尝试了几种方法,但都失败了,在互联网上也没有类似的例子

或者,作为更好的解决方案,是否有人知道这样一种方法:在完全键入beautiful nature并只按一次某个键后,只通过编程选择最近的单词“nature”

如果有人能分享这方面的优点,我将不胜感激

int startinglocation;
int endinglocation;
int selectionlength;


private void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key==Key.LeftShift) After typing Beautiful in textBox,
            {
            
                // To know the current location of Caret, Some wise instruction is needed here

            }
            if (e.Key == Key.RightShift) // After typing Nature in textBox,
            {


                // To know the current location of Caret, Some wise instruction is needed here

                int selectionlength=endinglocation- startinglocation;                    
                textBox.Select(startinglocation, selectionlength);
            }
        
    }

解决了的 后者是更好的解决方案,只需按Nicolas Tyler的按键即可选择最近的最新单词。谢谢你,泰勒先生

private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.RightShift)
        {
            selectWord();
        }
    }
    private void selectWord()
    {
        int cursorPosition = textBox1.SelectionStart;
        int nextSpace = textBox1.Text.IndexOf(' ', cursorPosition);
        int selectionStart = 0;
        string trimmedString = string.Empty;
        if (nextSpace != -1)
        {
            trimmedString = textBox1.Text.Substring(0, nextSpace);
        }
        else
        {
            trimmedString = textBox1.Text;
        }


        if (trimmedString.LastIndexOf(' ') != -1)
        {
            selectionStart = 1 + trimmedString.LastIndexOf(' ');
            trimmedString = trimmedString.Substring(1 + trimmedString.LastIndexOf(' '));
        }

        textBox1.SelectionStart = selectionStart;
        textBox1.SelectionLength = trimmedString.Length;
    }
使用

当您使用WinForms时,它会给出当前光标的位置

使用演示文稿基础时,您可以使用

TextBox.CaretIndex

如MSDN所述。

你好,斯托姆。我非常感激你的想法。但正如我已经尝试过的,在我的研究中,SelectionStart只指示我们进行文本选择后所选文本的起始索引。我希望通过知道插入符号的当前位置来了解以编程方式进行选择。现在,我找到了textBox.Select(textBox.text(beautifuly)。Length,textBox.text(beautifuly nature)。Length-textBox.text(漂亮的).Length)我需要试试这个..利用两个长度的差异..当我在WinForm上创建一个文本框时,可以执行一个
MessageBox.Show(textBox1.SelectionStart.ToString())例如,在文本框中写一个文本,然后在第五个字符后面放置光标,然后返回5!这是有效的!当你使用演示文稿基础的时候,你可以使用TrimBox。CurtCurrand。这也适用。我已经更新了我的答案。亲爱的暴风雨,我衷心感谢你对匿名者的积极支持。幸运的是,我找到了Nicolas Tyler提到的后一种更好的解决方案,并且它成功地工作了。请参考我的更新版本。
TextBox.CaretIndex