adressmoeistranici
@adressmoeistranici
Делатель

Как при word wrap узнать количество строк на которое разбит текст?

Пытался split символом '\n', но от этого результата не вышло. вышел всего один элемент. какой там символ?
и что сделает ворд врап если слово не влезет?
  • Вопрос задан
  • 574 просмотра
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Для рендеринга исходная строка не меняется. У текста есть cachedTextGenerator, из которого можно достать lineCount.

UPD: Для GUI.Label количество строк можно вычислисть с помощью GUIStyle.CalcHeight и GUIStyle.lineHeight.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tomnolane
@tomnolane
профессиональный разработчик
TextWrapping - не разделяет само текстовое предложение на части (т.е. не вставляет "\n").

узнать количество строк на которое разбит текст?

подсчитайте кол-во букв сколько влазит в 1 одну стоку (из-за шрифта и его размера - данные могут быть разные... и наверно только вручную можно посмотреть)
пускай это число будет равным 100, тогда (понадобится логика, скотч, и кусок кода на скорую руку)
//вводные данные
int temp_count_chars = 0;
                string temp_predlojenie_stroka = String.Empty;
                int all_chars = 100;
                int colli4estvo_strok = 1;
                string[] arr = textBox.Text.Split(new[] { ' ' }); 
                foreach(string slovo in arr)
                { 
                    if (all_chars >= slovo.Length && (temp_count_chars + slovo.Length) <= all_chars) // если слово меньше или равно общему кол-ву букв с троке и кол-во букв в этой строке вместе с новым словом меньше общей длины строки
                    {
                        if (!string.IsNullOrWhiteSpace(temp_predlojenie_stroka)) { temp_count_chars = temp_predlojenie_stroka.Length + 1;  temp_predlojenie_stroka = "";} //переносное слово с пробелом своим

                        temp_count_chars += slovo.Length + 1; // +1 (это пробел после каждого слова)
                        if (temp_count_chars >= all_chars)
                        {
                            colli4estvo_strok++; //переходим на новую строку
                            if (temp_count_chars != all_chars) // переносим слово
                            {
                                temp_predlojenie_stroka = slovo + " ";
                            }
                            temp_count_chars = 0;
                        }
                    } 
                }
MessageBox.Show("Кол-во строк: " + colli4estvo_strok);

скотч не пригодился - значит сэкономили...
п.с. не проверял, на скорую руку делал
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы