Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33

Перенос слова на другую строку,если строка превышает заданную длину

14.05.2020, 15:56. Показов 2243. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Краткий экскурс: я делаю чат по локальной сети.Хотелось бы приукрасить отправку сообщений,поэтому я сделал TextBox,с задним фоном,Multiline и ReadOnly на true.Делаю на примере WhattsApp,там сообщения в зеленой окантовке.
Собственно,сама проблема:как бы мне сделать так,чтобы текст,если он больше 35 символов переносился по словам,да причём,чтобы не просто обрезался,а слово,на котором должен быть перенос,улетало на строчку ниже?
Хелпуйте,в инете поискал,все способы работают не так,как надо.
Буду очень признателен
Вот мой код,но он не работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static string formatter(string inputString)
        {
            char[] splitter = new char[] { ' ', ',', '.', '/', '?', ';', '|', '<', '>', '^', '+', '=', '!' };
            var words = inputString.Split(splitter);
            var maxLengthString = 35;
            int wordIndex = 0;
            var spaceLetter = " ";
            var currentLine = new StringBuilder();
            string finalText = "";
            while (true)
            {
                if (currentLine.Length + words[wordIndex].Length + 1 > maxLengthString)
                {
                    //Console.WriteLine(currentLine);
                    currentLine.Remove(0, currentLine.Length);
                }
                currentLine.Append(words[wordIndex]);
                currentLine.Append(spaceLetter);
                wordIndex++;
                if (wordIndex == words.Length)
                {
                    finalText += currentLine + "\n";
                    break;
                }
            }
            return finalText;
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2020, 15:56
Ответы с готовыми решениями:

Строка: Как найти в строке первый символ, который входит во другую заданную строку?
Как найти в строке первый символ, который входит во другую заданную строку используя указатели и функции? Строки вводятся вручную.

Сделать условие если символ позиции превышает длину строки
Здравствуйте, была дана задача со строками и никак не могу нормально задать условие если номер позиции больше то ошибка например : ...

Записать в файл слова, заканчивающихся на заданную букву и их длину
1)Создать файл, содержащий несколько произвольных строк. (1-файл создается в блокноте пользователем,в 2-ой файл идет запись слов по...

6
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
14.05.2020, 17:09
Лучший ответ Сообщение было отмечено Oleg_cpp как решение

Решение

Лучше не привязываться к количеству символов, т.к. у символов разные размеры + потом сложности с изменением шрифтов, размеров и т.п.

Поскольку тема в WinForm создана, то там есть класс TextRenderer. С помощью него удобно отрисовывать текст на том же Graphics. Или можно отдельно посчитать размер текста с учетом переноса слов:
C#
1
var textSize = TextRenderer.MeasureText(text, font, new Size(textMaxWidth, 0), TextFormatFlags.WordBreak);
где textMaxWidth - максимальная ширина после которой нужно переносить слова.
1
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
15.05.2020, 10:52  [ТС]
Сделал,с использованием вашего кода.но ничего не получилось
Может,я что-то не так делаю?
C#
1
2
3
4
5
6
7
public void insertText(string text)
        {
            var textSize = TextRenderer.MeasureText(text, textBox1.Font, new Size(35, 0), TextFormatFlags.WordBreak);
            textBox1.Width = textSize.Width;
            textBox1.Height = textBox1.Height;
            textBox1.Text = text;
        }
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,149
Записей в блоге: 43
15.05.2020, 11:24
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
в инете поискал,все способы работают не так,как надо
А это чем не устраивает?
TextBoxBase.WordWrap Свойство (System.Windows.Forms) | Microsoft Docs
0
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
15.05.2020, 11:36  [ТС]
Оно на true.
Размер текста заранее неизвестен,поэтому размер текстбокса тоже заранее неизвестен
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
15.05.2020, 19:34
Цитата Сообщение от Oleg_cpp Посмотреть сообщение
но ничего не получилось
Что именно не получилось? Я проверил - все работает. Только высота у вас статическая. Чтоб она менялась ставьте ее исходя из textSize textBox1.Height = textSize.Height;. textSize.Width - будет от 0 до 35 (из вашего кода). Если 35 не хватает, то будут внизу добавляться строки.
1
 Аватар для Oleg_cpp
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 33
16.05.2020, 11:41  [ТС]
да у меня уже всё получилось,большое вам спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2020, 11:41
Помогаю со студенческими работами здесь

Вводится строка. Вывести слова стоящие на нечетных местах и имеющие длину больше длины предпоследнего слова.
#include&lt;fstream.h&gt; #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; void main() { int i,j,n,k,i1,l;...

Если строка имеет нечетную длину и не содержит символов к, то вывести на экран длину строки символов
3.Дана строка символов, состоящая из строчных английских букв и не содержащая пробелов. Если она имеет нечетную длину и не содержит...

Напечатать в алфавитном порядке все слова имеющие заданную длину n
1. дана строка. напечатать в алфавитном порядке все слова имеющие заданную длину n

Вставить в заданную позицию строки другую строку
Почему не получается вводит вторую строку? #include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;string&gt; ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru