繁体   English   中英

在RichTextBox_Click事件中获取插入符位置

[英]Get caret position in RichTextBox_Click event

我正在使用包含RichTextBox的文本编辑器。 我要实现的功能之一是随时在TextBox显示上述RichTextBox插入符号的当前Line和Column。

这是我使用的部分代码(其余代码与我的问题无关):

int selectionStart = richTextBox.SelectionStart;
int lineFromCharIndex = richTextBox.GetLineFromCharIndex(selectionStart);
int charIndexFromLine = richTextBox.GetFirstCharIndexFromLine(lineFromCharIndex);

currentLine = richTextBox.GetLineFromCharIndex(selectionStart) + 1;
currentCol = richTextBox.SelectionStart - charIndexFromLine + 1;

在这一点上,我应该提到,当有人使用RichTextBox ,插入符号可以通过三种方式更改位置:

  • 通过更改RichTextBoxText
  • 通过使用键盘上的箭头键
  • 通过单击RichTextBox上的任意位置

我上面发布的代码在前两种情况下没有问题。 但是,在第三种情况下它实际上并不起作用。

我尝试使用Click事件,但我注意到selectionStart变量将始终获得0值,这意味着我总是获得相同且错误的结果。 此外,在其他事件(例如MouseClickMouseUp上使用相同的代码也无法解决我的问题,因为即使在这些事件的持续时间内selectionStart为0。

因此,每当用户单击RichTextBox ,如何获取当前的Line和column?

您想要类似的东西:

private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
{
        RichTextBox box = (RichTextBox)sender;
        Point mouseLocation = new Point(e.X, e.Y);
        box.SelectionStart = box.GetCharIndexFromPosition(mouseLocation);
        box.SelectionLength = 0;
        int selectionStart = richTextBox.SelectionStart;
        int lineFromCharIndex = box.GetLineFromCharIndex(selectionStart);
        int charIndexFromLine = box.GetFirstCharIndexFromLine(lineFromCharIndex);

        currentLine = box.GetLineFromCharIndex(selectionStart) + 1;
        currentCol = box.SelectionStart - charIndexFromLine + 1;
}

在我看来,您真正想要的是处理TextBoxBase.SelectionChanged事件。 然后,导致选择更改的任何操作都将调用您的代码,并且作为附加的好处,当前选择将在调用事件处理程序时进行更新,并且可以确保获取正确的值。

如果那不能解决您的特定需求,那么我一定不能理解这个问题。 在这种情况下,请提供一个良好的, 最少的完整的代码示例 ,以清楚地显示您要执行的操作,并准确描述该代码的功能以及与您想要的代码有何不同。

暂无
暂无

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

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