Связь между длиной и размером шрифта строки и шириной текстового поля

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

Например, если у меня есть поле nvarchar(5) с именем IDClient, а размер шрифта равен 13, я хочу создать текстовое поле с шириной, достаточной для записи 5 символов.


person Jonathan    schedule 21.09.2009    source источник


Ответы (2)


Возможно, следует использовать TextRenderer.MeasureText(string, font).

Вот небольшой образец, который может вам помочь

        //Get this value from somewhere...
        TextBox textBox = new TextBox();
        int maxWidth = 10;
        int extraSpace = 3;

        //Create sample string
        StringBuilder sb = new StringBuilder(maxWidth);
        sb.Append('w', maxWidth);

        //Measure text 
        Size size = TextRenderer.MeasureText(sb.ToString(), textBox.Font);

        //Set width of TextBox to needed width
        textBox.Width = size.Width + extraSpace;
person Oliver    schedule 21.09.2009

Уточнить

тип ввода = 'текст' размер = '5' ширина = 'ш' ........>

Вы можете рассчитать w=num_characters * k. Где k постоянно. Сначала оставьте k = 15. А затем пробуйте и пробуйте, пока не найдете наилучшее соответствие.

person Krishna Kant Sharma    schedule 21.09.2009
comment
Также вы должны иметь в виду, что до тех пор шрифт является курьерским типом. Вы должны вычислить k по ширине 'w'. Потому что это самый широкий алфавит. - person Krishna Kant Sharma; 21.09.2009
comment
Спасибо!! Хорошо, давайте предположим, что я нашел идеальное значение K для size = 5. Что происходит, когда изменяется размер шрифта? Проблема в том, что я знаю только размер шрифта во время выполнения. Мне нужен какой-то алгоритм, который вычисляет W, используя размер и длину строки. - person Jonathan; 21.09.2009
comment
Я знаю, что это не лучший подход. Но вы можете это сделать: w= num_chars * font_size * k; а потом найти К. Поскольку ширина будет прямо пропорциональна размеру шрифта (линейным образом). Для начертания шрифта будет существовать допустимое значение k. - person Krishna Kant Sharma; 21.09.2009