在WPF中获取RichTextBox中当前光标位置的值

3

如何在 WPF 的 RichTextBox 中获取当前光标位置值?

RichTextBox 在 WPF 中有很多变化。

3个回答

1

看一下CaretPosition属性。

这个属性获取(或设置)输入光标的位置。

此外还有Selection属性。它返回一个对象,其中包含有关所选文本的信息,包括其StartEnd


1

嗨,希望这段代码能对你有所帮助

代码:

private static int EM_LINEINDEX = 0xbb;
[DllImport("user32.dll")]
extern static int SendMessage(IntPtr hwnd, int message, int wparam, int lparam);
private void UpdateCaretPos()
{
  int line, col, index;
  index = rtfText.SelectionStart;
  line = rtfText.GetLineFromCharIndex(index);
  col = index - SendMessage(rtfText.Handle, EM_LINEINDEX, -1, 0);
  panCaret.Text = (++line).ToString() + ", " + (++col).ToString();
}
private void rtfText_TextChanged(object sender, EventArgs e)
{
  UpdateCaretPos();
}
private void rtfText_KeyDown(object sender, EventArgs e)
{
  UpdateCaretPos();
}

private void rtfText_KeyUp(object sender, EventArgs e)
{
  UpdateCaretPos();
}

致敬

Karan Shah


1
抱歉伙计,必须降级,因为它是WPF,使用win32 API是不好的习惯。WPF内置支持获取鼠标指针。 - Bek Raupov
点赞,你解决了我的 Windows Forms RichTextBox 问题 :)!谢谢! - Andro

0
   private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Back)
    {
        var z = this.richTextBox1.SelectionStart;
        var r = richTextBox1.Find(" ", 0, z, RichTextBoxFinds.None | RichTextBoxFinds.Reverse);
        var q = this.richTextBox1.Text.Substring(r + 1, z - r - 1);
        switch (q)
        {
            case "test":
                this.richTextBox1.SelectionStart = r + 1;
                this.richTextBox1.SelectionLength = z - r - 1;
                this.richTextBox1.SelectionColor = Color.Black;
                this.richTextBox1.SelectionStart += this.richTextBox1.SelectionLength;
                this.richTextBox1.SelectionLength = 0;
                //e.Handled = true;
                break;
            default:
                this.richTextBox1.SelectionStart = z;
                break;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接