17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236

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

26.03.2020, 23:12. Показов 968. Ответов 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 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 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 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru