Вывод отформатированной строки с русскими буквами в компонент

_Marcus_

Привет всем. Вопрос, как в элемент linklabel или обычный label можно вывести отформатированную строку с русскими буквами?
wchar_t buffer[120], text1[50], text2[50];
wcscpy(text1, L"текст1"); wcscpy(text2, L"текст2");// для теста
 
        swprintf(buffer, 120, L"%s %s", text1, text2);
        linkLabel2->Text = gcnew System::String(buffer);
Это то что есть сейчас у меня, и в результате в linkLabel2 просто пусто, никакого символа даже нет.. Но если вывести text1 и text2 в файл - там пишутся они. И еще, для русского текста подходит и char, и wchar_t, или нет? Пытался аналогичными функциями (strcpy, sprintf) записать в эти 2 переменные (уже как char) то что выше - в итоге в linkLabel2 каракули какие-то, русских букв нет..Прошу раньше времени не переводить пожалуйста эту тему в другой раздел, ведь как я заметил - тут быстрее отвечают)
12 ответов

_Marcus_

Элементы управления работают с String, вот его и используй, а не массивы. Там есть Format() и прочее.


_Marcus_

nmcf, не получается у меня с ним.. С char вроде бы работает, но:
// вот так выводит русские буквы:
    char temp[120];
    sprintf(temp, "%s", "Имя");
    linkLabel2->Text = gcnew System::String(temp);
 
// а вот если сначала сделать как на прикрепленном скрине, а после этот код ниже - не выводит:
    char temp[120];
    sprintf(temp, "%s %s", NI[i].first_name_user, NI[i].last_name_user);
    linkLabel2->Text = gcnew System::String(temp);
В last_name_user и first_name_user русский текст.. я его вывожу в файл test.txt для проверки циклом - все нормально видно, но в linklabel'e не получается...


_Marcus_

Потому что ты смешиваешь управляемый и неуправляемый код. Из массива объект String просто так не сделать, тем более он у тебя в древней кодировке.


_Marcus_

nmcf, и как тогда поступить, чтобы все нормально было? Распишите пожалуйста на словах хотя бы, что во что преобразовать нужно


_Marcus_

Попробуй wchar_t использовать вместо char, и соответственно wsprintf и т. д.


_Marcus_

nmcf, я ведь так пробовал уже) В первом посте вот:
wchar_t buffer[120], text1[50], text2[50];
wcscpy(text1, L"текст1"); wcscpy(text2, L"текст2");// для теста
swprintf(buffer, 120, L"%s %s", text1, text2);
linkLabel2->Text = gcnew System::String(buffer);


_Marcus_

я ведь так пробовал уже)
У меня этот пример работает.


_Marcus_

Почему вы пишите на C++/CLI, и при этом не используете стандарные .NET классы, типа System::String, System::Text::RegularExpressions::Regex, managed массивы и т.д.? Всех этих буферов, wcscpy, swprintf, swprintf и т.д. можно было бы избежать, и проблем с выводом тоже бы не было.


_Marcus_

Someone007, там мутный синтаксис. Надо или C#, или C++ без CLI.


_Marcus_

там мутный синтаксис
Какой есть... Ничего сложного нет в нем. Например код из первого поста превратился бы в
String^ text1 = L"текст1";
String^ text2 = L"текст2";
 
linkLabel2->Text = String::Format(L"{0} {1}", text1, text2);


_Marcus_

Format я уже предлагал. Там проблема, наверное, в том, что эти строки не заданы константами, а выделяются regex'ом из текстового файла или ещё как-то. Т. е. надо полностью на .NET переделывать.


_Marcus_

Т. е. надо полностью на .NET переделывать.
Собственно я это и предлагаю.