У нас есть ряд многострочных, прокручиваемых элементов управления текстовыми полями Winforms в .NET 2.0, которым необходимо реализовать разбиение на страницы, чтобы позволить пользователю перемещаться по их содержимому, только перемещая одну страницу (полный контроль над текстом) за раз.
Как часть этого, мне нужно получить количество полных строк текста, которые могут быть видны на экране в любой момент, чтобы определить, сколько страниц содержит текстовое поле.
Я уверен, что нет сообщения Windows, которое позволит мне получить эту информацию напрямую, а также не смогу выработать приемлемое решение этой проблемы.
Ниже мы используем текущее решение, которое иногда приводит к ошибке округления, по меньшей мере, одной линии, поэтому она была менее успешной.
public int LinesPerPage
{
get
{
return (int)(this.Height / this.Font.Height);
}
}
В идеале я хотел бы знать алгоритм, используемый при рисовании текста в элементе управления, но если он недоступен, и другие предложения, которые люди будут очень благодарны.
В классе System.Drawing.Graphics есть метод, называемый MeasureString. Одна из перегрузок метода возвращает строки, установленные (что будет видно на основе других переданных параметров).
Вы можете попробовать следующее:
public int LinesPerPage
{
get
{
return (int)(this.ClientSize.Height / this.Font.Height);
}
}