Как расположить диалог поиска, чтобы не покрывать найденный текст? - PullRequest
0 голосов
/ 17 августа 2010

Я создал немодальное диалоговое окно поиска для использования при поиске в 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.Это точное значение, которое я проверил.Мой код помещает диалоговое окно поиска внизу richtextbox, если lineNum меньше половины значения this.lineCount, в противном случае вверху

Однако linePos ненадежен.Иногда значение имеет ноль, когда строка с выделенным текстом является 19-й строкой, а lineCount - 20, поэтому диалог перемещается по выделенному тексту.Таким образом, он не позволяет точно рассчитать, где richtextbox отображает выделенный текст.

1 Ответ

1 голос
/ 17 августа 2010

Вам не нужно самостоятельно рассчитывать положение персонажа, вы можете получить его, используя метод GetPositionFromCharIndex

...