如何定位查找对话框以覆盖找到的文本?

时间:2010-08-16 22:04:55

标签: c# .net-2.0 richtextbox

我创建了一个无模式查找对话框,用于在RichTextBox中搜索,并且在找到找到的文本后无法定位查找对话框,因此它不会覆盖所选文本。我试图使用以下内容获取相对于客户区的行号:

this.lineCount = this.rtb.Height / (this.rtb.Font.Height+2);

rtb.Select(rtbIndex, searchText.Length);

int linePos = (this.rtb.GetLineFromCharIndex(this.rtb.GetFirstCharIndexOfCurrentLine())) % this.lineCount;

if(linePos<(this.lineCount/2))
{
    this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Bottom - this.Height));
}
else
{
    this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Top));
}

this.lineCount是根据字体高度和richtextbox的高度适合客户区域的行数。这是我已经验证的准确值。如果lineNum小于this.lineCount值的一半,我的代码会将查找对话框定位在richtextbox的底部,否则位于顶部

Hoewever,linePos不可靠。当带有所选文本的行是第19行且lineCount为20时,它有时值为零,因此对话框将移动到所选文本上。因此,它无法可靠地计算richtextbox显示所选文本的位置。

1 个答案:

答案 0 :(得分:1)

您不需要自己计算角色位置,可以使用GetPositionFromCharIndex方法获取