我创建了一个无模式查找对话框,用于在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显示所选文本的位置。