2017-01-22 1 views
0

Я парень C/Java/VBA, который является новым для C++ ... Мне нужно взять вектор символов и заполнить символы в списке (Visual Studio 2015) после нажатие кнопки на форме.Visual C++ vector <char> помещает числовые значения в список

Когда я пытаюсь сделать то, что кажется естественным (код ниже), поле списка заполняется значениями ASCII base-10 вместо символов. Я искал способы «форсировать» listbox.Items.Add(), чтобы взять его как персонажа, но мне не повезло. Может ли кто-нибудь сказать мне, что я делаю неправильно?

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
     std::vector<char> CDROMDrives{ 'A', 'B', 'C'}; 
     int i = 0; 
     for (auto &c : CDROMDrives) { 
      listBox1->Items->Add(c); 
      i++; 
     } 
    } 

Here's what the list box looks like currently

+1

Добро пожаловать в переполнение стека! Я рекомендую вам [принять тур] (http://stackoverflow.com/tour). –

+0

Не используйте C++/CLI для кода пользовательского интерфейса. –

ответ

0

Стандартная заметка о языке: C++/CLI предназначен как мост, позволяющий C# или другому .Net-коду вызывать код C++. Он не предназначен как основной язык разработки. Если вы хотите изучить C++, я бы использовал C++ с MFC в качестве своего инструментария GUI. Если вы хотите изучить управляемый код, я бы изучил C# с помощью WinForms или WPF. Если у вас есть опыт Java/VBA, я бы пошел с C#.

Это говорит:

Вы не сказали, что GUI инструментарий вы используете, или то, что тип listBox1 есть, но это, безусловно, управляемый тип какой-то. Таким образом, вам нужно сделать .Net System::String, чтобы вставить в список. A C++ char будет интерпретироваться как 8-разрядное целое число, а C++ std::string не будет интерпретироваться так, как вам хотелось бы.

Чтобы преобразовать в строку, нарисуйте ее надлежащим образом managed type, а затем вызовите метод ToString.

listBox1->Items->Add(((System::Char)c).ToString()); 
0

65, 66 и 67 являются числовые значения 'A', 'B', и 'C' в ASCII. Вы должны убедиться, что ваша программа интерпретирует эти значения как char s, а не int s. Попробуйте изменить условие цикла на for (char &c : CDROMDrives) или листинг на char перед тем, как войти в список.

+0

Вектор имеет символы, поэтому 'auto' будет выводить символы. – chris

+0

Тогда может быть, что 'ListBox' принимает только числовые типы или' String'. Попробуйте преобразовать свой 'char' в' String' перед добавлением. –

Смежные вопросы