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

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

26.03.2020, 23:12. Показов 924. Ответов 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
4189 / 2644 / 654
Регистрация: 23.09.2014
Сообщений: 8,917
Записей в блоге: 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
4189 / 2644 / 654
Регистрация: 23.09.2014
Сообщений: 8,917
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru