Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236

Как сделать чтобы в элементе textBox или richTextbox строки терминировались по размеру текстового поля?

26.03.2020, 23:12. Показов 945. Ответов 7

Студворк — интернет-сервис помощи студентам
В общем проблема такая: Нужно из элемента text box или аналогичного ему извлечь строки, причём строки должны быть такими какими они видны в текстовом поле.

С дефолтными настройками элемент textbox вставляет в текст символ переноса строки только если самому нажать enter
иначе для него введённый в поле текст из 10 строк это одна сплошная строка.

Как я делаю. Я маршалингом перекодирую в массив char и там ищу символ переноса строки. Их там 2 это символ с кодом 13 и с кодом 10. Так называемый массив строк который есть в свойствах этого текстбокса также строками считает только то что терминировано символом переноса строки.

Что же делать ? как вытащить строки в том виде как они выглядят визуально.?

Идеально бы меня устроила двухмерная матрица из символов размером в точности как текст на экране.


И в догонку ещё вопрос, как сделать чтобы перенос текста был не по словам а по буквам? свойство wordwrap либо переносит по словам либо вообще не переносит. А я хочу чтобы строка ломалась в любом месте.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2020, 23:12
Ответы с готовыми решениями:

Сделать возможным перенос строк в TextBox. Или сделать, чтобы RichTextBox отображал текст неформатированным (как TextBox)
Вот хотел узнать, как сделать так, чтобы RichTextBox отображал текст не форматированным? Или как сделать, чтобы в TextBox при нажатии...

Как сделать подсчет строчек в RichTextBox или TextBox
Здравствуйте! Хотел узнать если такое в самой студия изначально, если нету тогда хотел бы узнать как это можно реализовать. Пример...

Как сделать, чтобы при нажатии кнопок увеличить/уменьшить, размер текстового поля(textarea) ?
Помогите, пожалуйста! Как сделать, чтобы при нажатии кнопок увеличить/уменьшить, размер текстового поля(textarea) соответственного...

7
Just Do It!
 Аватар для XLAT
4211 / 2668 / 655
Регистрация: 23.09.2014
Сообщений: 9,082
Записей в блоге: 3
30.03.2020, 21:18
Цитата Сообщение от Святогор Посмотреть сообщение
должны быть такими какими они видны в текстовом поле.
не мудроствуя:
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
28
29
30
31
#include <stdafx.h>
#include <string>
#include <msclr/marshal_cppstd.h>
 
using namespace System;
using namespace msclr::interop;
 
std::wstring& foo(std::wstring& str, const size_t WIDTH)
{   std::wstring res;
    for(size_t pos = 0; pos < str.size(); pos += WIDTH)
    {   res += str.substr(pos, WIDTH);
        res += L"\r\n";
    }
    std::swap(res, str);
    return str;
}
 
int main()
{   
    std::wstring str =
L"В общем проблема такая: Нужно из элемента text box или аналогичного ему извлечь\
 строки, причём строки должны быть такими какими они видны в текстовом поле.";
 
    const size_t WIDTH_TEXTBOX = 9;
 
    String^ text = marshal_as<String^>(foo(str, WIDTH_TEXTBOX));
    Console::WriteLine(text);
 
    Console::ReadLine();
    return 0;
}
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
31.03.2020, 09:43  [ТС]
Вы совершенно правы но есть одна проблема. Вы не знаете как текст выглядит в окне и каким образом он его переносит. Вы строки отмеряли по количеству символов но в окне они переломаны с переноса по словам.
Я пока что обдумываю вариант делать именно то что вы написали при каждом изменении текста и принудительно вставлять символы перехода на новую строку. Может тогда видимый текст будет соответствовать его разметке в массиве символов. Вообще конечно подход майкрософта удивляет. Если включён алгоритм переноса по словам то какого фига при этом не вставляется символ перехода на новую строку?
Судя по тому что например в хтмловских обьектах ровно такая же история, видимо корни уходят куда-то совсем к другой системе откуда все эти обьекты были позаимствованы. Может это с мака или юниксов утянули?
0
Just Do It!
 Аватар для XLAT
4211 / 2668 / 655
Регистрация: 23.09.2014
Сообщений: 9,082
Записей в блоге: 3
31.03.2020, 09:56
Святогор,
нужно сделать все окна с РАВНОЙ шириной,
тогда текст будет ломаться в одних и тех же местах.

нет?
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
31.03.2020, 15:28  [ТС]
Не совсем так. Я отправляю этот текст на устройство, и этому устройству требуется массив где каждая строка строгой длинны а вместо недостающих символов нужно ставить нули.

Я сделал текст бокс именно такой ширины чтобы это соответствовало нужной длинные строк.
Это что-то вроде визивиг редактора.
А у него у этого текст бокса, видимые переломы строк не всегда соответствуют тому где стоят символы новой строки.
Например если я сам не нажал ентер то он дойдя до края переносит текст на новую строку но символ перевода строки не вставляет в этот текст.
В этом то и вся проблема.
Придётся наверное как я говорил прогонять весь текст после каждого изменения и вставлять символы новой строки.
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
05.04.2020, 00:49  [ТС]
Обнаружилась новая проблема. Когда я попытался перебрать содержимое textbox посимвольно, то оказалось что его можно только читать а менять нельзя. Если я правильно понял то можно только присваивать сразу полностью весь текст.

В связи с чем возникает вопрос, а в массив какого типа можно копировать элементы взятые из string^?
char то ведь однобайтный а string^ похоже состоит из двухбайтного unicode или windows 1251 (тоже вопрос)

Может кто-нибудь подскажет где есть описание всех типов c++/cli ?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
05.04.2020, 19:41
C++
1
2
3
4
            IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(textBox1 ->Text);
            char* nativeString = static_cast<char*>(ptrToNativeString.ToPointer());
            nativeString[0] = 'a';
            textBox1 ->Text = gcnew String(nativeString);
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
12.04.2020, 22:14  [ТС]
В общем проблема какая-то непобедимая это просто заговор приората сиона.

В textboxe Никаким образом не возможно ограничить длину вводимой строки.

1) Ограничение размеров даёт только ограничение видимой области всё что не влезло скролируется.
2) Если отключить скролирование то все равно скролируется но без видимых скролеров.
3) Установка свойства wordwrap=true вроде бы даёт нужный результат. Казалось бы текст переносится и длина строк
ограничена. Но не тут то было. То как текст выглядит в форме не соответстыует реальному его форматированию. Тоетсть
строки переносятся по словам но как ни удивительно символ переноса строки при этом не вставляется.

Из этого выходит что вычислить реальное форматирование текста практически невозможно.

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

Создание визуально конфигурируемых программ и сайтов умножает на ноль значительную часть великих мастеров создания и подгонки сайтов и разного рода софта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2020, 22:14
Помогаю со студенческими работами здесь

как сделать случайный выбор строки из текстового поля (из переменной)
Как такое можно осуществить? например, есть переменная, содержащая три строки: как сделать чтобы он сам выбрал любую строку?

Как записать в richTextBox/textBox данные из текстового файла
Ребята,недавно начал работать с Windows Forms Application в Visual Studio на C++. !!не C#!! так вот, не могу разобраться, как записать в...

Как сделать так чтобы данные из dateTimePicker или textbox отрисовались на изображении в picturebox
Подскажите, если это возможно

Как сделать что бы первые 11 символов каждой строки в richTextBox невозможно было стереть или редактировать?
Здравствуйте Как сделать что бы первые 11 символов каждой строки в richTextBox невозможно было стереть или редактировать ? (Под...

Как сделать, чтобы можно было взять тригонометрическую функцию из файла или textBox и вставить в код ?
Есть у меня программа(реализация БПФ), но тригонометрическая функция, которая берётся для преобразования, может меняться только через код. ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru