Как узнать, есть ли в текстовом поле перенесенные строки? - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь изменить шрифт текстового поля при изменении его размера, чтобы показать наиболее подходящий размер шрифта, но с учетом количества строк исходного текста.Но мне не удалось узнать, переносятся ли строки, чтобы уменьшить размер шрифта.

Не могли бы вы дать мне представление о том, как это сделать?

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Этого нельзя достичь, просто обратившись к методам или свойствам компонента.

Вам необходимо использовать EM_GETLINECOUNT message

Пример кода (преобразован из оригинала пример кода в Visual Basic в C #):

using System.Runtime.InteropServices;

public class Form1
{    
    private const int EM_GETLINECOUNT = 0xba;
    [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);

    private void TextBox1_TextChanged(System.Object sender, System.EventArgs e)
    {
        var numberOfLines = SendMessage(textBox1.Handle.ToInt32(), EM_GETLINECOUNT, 0, 0);
    }
}

Я проверил, и он работает.

2 голосов
/ 06 декабря 2011

Объект System.Drawing.Graphics имеет функцию Measure String, если требуется точный просмотр длины строки.

     System.Drawing.SizeF  len2 = graphic.MeasureString(*text*, *font*);

Он не учитывает начальные пробелы, поэтому для своих измерений я использовалчто-то вроде этого, чтобы заменить пробелы на 'X', который обычно был близок по размеру.

     if (ibText.Content.Length > 0 && ibText.Content[0] == ' ')
           len2 = graphic.MeasureString(ibText.Content.Replace(' ', 'X'), ibText.Font);
0 голосов
/ 06 декабря 2011

возможно, вы могли бы вместо этого обернуть текстовое поле внутри ViewBox: оно выполнит работу по изменению размера за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...