#1 12.06.11 00:15
Visual Studio, Windows Forms и работа с RichTextBox
Помогите пожалуйста, переделывал тут консольные программы в форму и столкнулся с проблемой, решение которой не смог найти в интернете.
Есть текст, допустим такой:
Код::
40 123,21323 323,213 45 123,1232 65,234 50 76,320 34,4354
Вывожу и ввожу который в RichTextBox. Подскажите, как считать его оттуда, чтобы получилось 3 массива, в которых будут значения с каждого столбца? Нужно что-нибудь типа fscanf только чтобы работал с RichTextBox, чтобы можно было задать шаблон и по нему считать значения в три массива. Либо если есть более удобный способ, подскажите, как реализовать.
Пытался считать строки и разобраться с ними отдельно, но с форматами чет не разобрался, там какие-то особенные строковые они и известные мне операторы не работают с такими и не переводятся в формат обычной строки, или char'а.
Offline
#2 12.06.11 02:10
Re: Visual Studio, Windows Forms и работа с RichTextBox
а язык какой? Если использовать именно RichTextBox, то в чем проблема в качестве разделителей испльзовать пробел и символ перевода строки? Если в RichTextBox есть свойство Multiline конечно. Для .Net есть такой элемент, называется DataGridView, по-моему. Очень удобный компонент
Исправлено [PAUL] (12.06.11 02:15)
Offline
#3 12.06.11 02:29
Re: Visual Studio, Windows Forms и работа с RichTextBox
Проблема в том как вытащить этот текст из Бокса по нужному мне шаблону, то есть каждый столбец в отдельный массив и я не могу понять, как это сделать. Да, в качестве разделителя надо использовать либо пробел, либо табуляцию, но каким оператором произвести это считывание? С выводом в Бокс нет проблем, а вот с считыванием из него проблемы. DataGridView смотрел, там вроде как базу данных подключать надо, а я пока не разбирался как с ней работать, поэтому хотелось бы по проще)
Offline
#5 12.06.11 12:19
Re: Visual Studio, Windows Forms и работа с RichTextBox
Не надо в DataGridView подключать базы данных - я лабы сдавал и без них :) Почитай здесь:
http://msdn.microsoft.com/ru-ru/library … .rows.aspx
А по RichTextBox, есть же свойство Text у него. В char тебе переводить не надо, так как это Юникод (символ кодируется 2мя байтами), и там нужно использовать уже функции для работы с Юникодом. Ты можешь где-то в настройках проекта установить ANSI, но я бы не заморачивался по этому поводу - сейчас в подавляющем большинстве случаев требуется Юникод, да и опыта наберешься ;) Ну и еще маленький совет: если используешь Windows.Forms, то лучше использовать в качестве языка C# (ИМХО, проще разобраться). Если пишешь на С++, то лучше учи ATL/WTL ;)
Исправлено [PAUL] (12.06.11 12:21)
Offline
#6 12.06.11 13:18
Re: Visual Studio, Windows Forms и работа с RichTextBox
я вот и пытался вытащить из Бокса текст через text или lines, но визуал плювался мне на формат w_char помоему и w_string, а я не знаю функций, которые бы с ними работали.
[PAUL] написал(а):
лучше использовать в качестве языка C#
Я его и учу щас потихоньку. Но просто тут старые проекты есть на С++ которые в форму переделать надо и чтобы меньше конфликтов было решил на С++ форму и сделать, туда просто скопипастил текст старой программы с минимальными доработками.
P.S.: про DataGridView почитаю, спасибо)
Offline
#7 12.06.11 17:15
Re: Visual Studio, Windows Forms и работа с RichTextBox
w_char и w_string и есть Юникодные буквы и строки. функции обычно отличаются от ANSI-шных только префиксом w*. Ну и программы перевести с одного языка на другой не сильно сложно. С указателями правда проблема будет, но и ее решить можно;)
Исправлено [PAUL] (12.06.11 17:17)
Offline
#8 12.06.11 18:42
Re: Visual Studio, Windows Forms и работа с RichTextBox
В общем так...) richTextBoxData->Text имеет формат System::String^ с ним вообще не могу представить что может работать.
Пробую по другому:
Код::
for(i=1;i<=richTextBoxData->Lines->Length+1;i++)
{
wchar_t ch;
ch=Convert::ToChar(richTextBoxData->Lines[i]);
wscanf(&ch,"%lf %lf %lf",&fi1[i], &psi1[i], &delta1[i]);
}На стоке ch=Convert::ToChar(richTextBoxData->Lines[i]); влетает неведомая ошибка "FormatExeption не обработано. Длина строки должна составлять один знак."
Может я чего подзабыл и не правильно пишу, подскажите пожалуйста.
Offline
#10 12.06.11 19:26
Re: Visual Studio, Windows Forms и работа с RichTextBox
А разве если перевести string в char не получится массив символов, из которых состоит строка? Вот как я понимаю оператору wscanf нужен на входе адрес именно массива char, из которого он по шаблону вытащит нужные переменные.
Offline
#11 12.06.11 20:39
#12 12.06.11 20:50
Re: Visual Studio, Windows Forms и работа с RichTextBox
Может и так. Что это за L, зачем она? А вообще программа до этой строчки даже не доходит, так что надо в начале решить проблему в строчке выше)
Offline
#13 12.06.11 21:11
Re: Visual Studio, Windows Forms и работа с RichTextBox
В манах по этому твоему методу tochar написано что понимает он тока стринг линной не более одного символа. ТОесть все правильно онте сказал строка должна быть не более одного символа.
ТОгда сделай ход конем, сам представь получаемую строку в виде одномерного массива стрингов по 1 символу. хотя стринг это и есть одномерный массив. Т.е. самостоятельно заполни массив ch. Как то так.
Offline
#14 12.06.11 21:21
Re: Visual Studio, Windows Forms и работа с RichTextBox
Hix написал(а):
сам представь получаемую строку в виде одномерного массива стрингов по 1 символу
не представляю как это сделать)
есть еще вот такая функция richTextBoxData->Lines[i]->ToCharArray() написано "Копирует знаки данного экземпляра в массив знаков Юникода". Но если я пишу ch=richTextBoxData->Lines[i]->ToCharArray(); то компилятор выдает ошибку невозможно преобразовать 'cli::array<Type,dimension> ^' в 'wchar_t'. И я вот не пойму в какой формат переводит эта функция.
Offline
#15 12.06.11 21:27
#16 12.06.11 21:31
Re: Visual Studio, Windows Forms и работа с RichTextBox
не представляю, как по одному символу захватывать. там же не массив char, а string. это же к char можно только обратиться по элементу ch[i]. Студия 2008
Offline
#17 12.06.11 21:35
Re: Visual Studio, Windows Forms и работа с RichTextBox
В Visual C++ не специалист (попробовал было, понял что в С# весь тот-же набор, но заморочек меньше и начал изучать его), но разве у тебя Lines[i] - это не строка? Ты пытаешься сконвертировать строку в символ, что недопустимо. Тогда тебе надо написать что-то типа
Код::
wchar_t *str;
не забыв при этом выделить количество памяти размером в длину считываемой строки
Offline
#18 12.06.11 21:36
#19 12.06.11 21:39
Re: Visual Studio, Windows Forms и работа с RichTextBox
если сделать просто
Код::
wchar_t *ch; ch=richTextBoxData->Lines[i];
То появляется ошибка форматов "невозможно преобразовать 'System::String ^' в 'wchar_t *'". Поэтому я делал convert::tochar, но он похоже переводит только в 1 символ char, потому что выскакивает та ошибка.
Offline
#20 12.06.11 21:41
#21 12.06.11 21:45
#22 12.06.11 21:46
Re: Visual Studio, Windows Forms и работа с RichTextBox
http://www.cyberforum.ru/cpp-cli/thread97533.html
и здесь наступает дзен...
Offline
#23 12.06.11 21:51
#24 12.06.11 22:15
Re: Visual Studio, Windows Forms и работа с RichTextBox
Пытаюсь по одному символу загнать, но не выходит.
Код::
for(i=0;i<=richTextBoxData->Lines->Length;i++)
{
wchar_t *ch;
for(j=1;j<=richTextBoxData->Lines[i]->Length;j++)
{
ch[j]=Convert::ToChar(richTextBoxData->Lines[i][j]);
}
wscanf(ch,L"%lf %lf %lf",&fi1[i+1], &psi1[i+1], &delta1[i+1]);
}делаю так, вылетает с ошибкой "Необработанное исключение типа "System.NullReferenceException" ". Всяко разно пробовал менять объявления либо адреса переменой, либо просто переменной, не помогло. Никогда толком не мог понять эти адреса и обращения к ним))
Offline
#25 12.06.11 22:16
Re: Visual Studio, Windows Forms и работа с RichTextBox
[PAUL] написал(а):
и здесь наступает дзен...
Почитал, ничего путного не нашел) Я видать чего-то не понимаю. Там опять пишут array этот, а на него все ругается и не хочет конвертировать. Натыкался кстати на эту страницу раньше, когда искал решение проблемы.
Offline
#26 12.06.11 22:20
Re: Visual Studio, Windows Forms и работа с RichTextBox
Нахрена столько всяких типов переменных понапридумывали?! Только теперь мучайся с ними!
Offline
#27 12.06.11 23:07
Re: Visual Studio, Windows Forms и работа с RichTextBox
Пробую уже и так
Код::
for(i=0;i<=richTextBoxData->Lines->Length;i++)
{
wchar_t ch;
array<wchar_t>^ msv = richTextBoxData->Lines[i]->ToCharArray();
j=0;
wstring tmp;
do
{
tmp=tmp + msv[j];
j++;
}while (msv[j] != '\t');
&fi1[i+1]=Convert::ToDouble(tmp);
}Ругается на Convert::ToDouble(tmp) "1>error C2665: System::Convert::ToDouble: ни одна из 18 перегрузок не может преобразовать все типы аргументов". Как преобразовать wstring в double? Прогоняю программу без этой строки с tmp записывается все что надо, только преобразовать в double бы и все!
Offline
#28 13.06.11 01:05
Re: Visual Studio, Windows Forms и работа с RichTextBox
Код::
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
for (int i=0; i<richTextBox1->Lines->Length;i++)
{
double d=0.0;
String^ msv1 = richTextBox1->Lines[i];
array<String^>^ msv2=msv1->Split(' ');
for(int j=0; j<msv2->Length;j++)
try
{
d=Convert::ToDouble(msv2[j]);
MessageBox::Show("Horrah!!! The number is "+Convert::ToString(d));
}
catch (Exception^ e)
{
String^ exc=e->Message;
MessageBox::Show(exc);
}
}
}
};вот тебе метод, балуйся :)
З.Ы. Себе и окружающим на заметку: оказывается чтобы написать простенькую программу на Managed C++ после С# не так много времени требуется
З.З.Ы. Чтобы число double считалось валидного формата, надо вводить не "123.456", а "123,456" - в свое время с этим долго мучался:)
Исправлено [PAUL] (13.06.11 01:08)
Offline
#29 13.06.11 01:57
Re: Visual Studio, Windows Forms и работа с RichTextBox
[PAUL], ты вообще мужик! Спасибо огромное за помощь! все работает) только добавил строку if (msv1 == "") break; а то у меня попадал на последний перевод строки и выводил ошибку в формате)
Offline
#30 13.06.11 03:33
Re: Visual Studio, Windows Forms и работа с RichTextBox
У меня еще вот есть вопрос не в тему, но может подскажите) Есть ли специальные библиотеки и функции, чтобы рисовать графики? Или только самому писать функции вывода всего и вся по точкам и простым фигурам?
Offline
#31 13.06.11 11:07
Re: Visual Studio, Windows Forms и работа с RichTextBox
пожалуйста:)
Рисовать графики можно, для 2008 студии есть отдельный компонент MSChart, у меня валяется здесь:
magnet:?xt=urn:tree:tiger:PPIV3DZV2ORZQ … SChart.rar
но может и более новая версия появилась уже.
Для 2010 студии этот компонент встроен
Исправлено [PAUL] (13.06.11 11:18)
Offline

