none
VS 2012 RRS feed

  • Вопрос

  • ОС W8.1(x64),VS 2012. Для работы с Foms ( отсутствовал шаблон) в папку vsNET загрузил VS2012CppWinForms2. Окно конструируется со всеми "наворотами". Однако программки не запускаются. Может что-то надо догрузить? Прошу у Форума совета.

    С признательностью Otkinant.

     
    29 ноября 2016 г. 16:16

Ответы

  • Предположу, что программа не компилируется из-за невозможности неявного приведения System::Double в тип float, а окно выводится поскольку среда запускает последнюю успешную версию. Измените на System :: Single :: Parse 
    • Помечено в качестве ответа Otkinant 30 ноября 2016 г. 15:35
    30 ноября 2016 г. 9:41
  • Покажите, пожалуйста, полное содержимое тела обработчика. А также поясните, какие именно значения Вы вводите в textBox-ы.

    Поясню смысл своих вопросов. Ваш код может компилироваться, но он потенциально опасен. Метод Parse ожидает конкретный символ-разделитель целой и дробной части числа в зависимости от текущих региональных установок. Если языком системы является Английский - ожидается точка, если Русский - запятая. При наличии неверного символа-разделителя Parse генерирует исключение о неверном формате строки. Если Вы "глотаете" эти исключения, то в label ничего и не должно появиться. Потому я и прошу показать полный код обработчика.

    Если Вы хотите вводить привычную для программистов на C++ точку при русской локализации системы, в Parse нужно добавить еще один параметр:

    a = System::Double::Parse(this->textBox1->Text, CultureInfo::InvariantCulture);

    Класс CultureInfo объявлен в пространстве System::Globalization.

    Ну, и типы данных, разумеется, нужно подбирать совместимые (double - Double, float - Single).


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Otkinant 30 ноября 2016 г. 15:33
    30 ноября 2016 г. 10:32

Все ответы

  • "Кто на ком стоял"? Объясните внятно какую версию VS2012 Вы используете и какие Forms-ы Вам требуются? Т.е. язык программирования, технология, какие у Вас уже имеются знания для создания приложений данного типа? Вы, например, понимаете, что такое главная функция приложения С++? Или то, что "программки" могут "запускаться", только если они собраны без ошибок?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    29 ноября 2016 г. 19:28
  • Уважаемый  kosuke904!

    По существу заданных вопросов :

    1) VS 2012 Professional.

    2) Требуются Forms на Visual C++ --> CLR.

    3) На остальные два вопроса ответ "да". Занимался консольными, решил освоить Forms.

    Заминка произошла на простенькой программке. Обработчик button_Click. На форме два TextBox, одна Button и три Label :

     float a, b, c;

     a = System :: Double :: Parse ( this -> textBox1 -> Text );

     b = System :: Double :: Parse ( this -> textBox2 -> Text );

     c = a + b;

     label3 -> Text = c . ToString();

    Отладчик выдал " окно ", заносим "а",  "b", делаем " Click" и ... в label3 никого Прошу помочь разобраться.

    С уважением Otkinant.


    • Изменено Otkinant 30 ноября 2016 г. 9:11
    30 ноября 2016 г. 7:26
  • Предположу, что программа не компилируется из-за невозможности неявного приведения System::Double в тип float, а окно выводится поскольку среда запускает последнюю успешную версию. Измените на System :: Single :: Parse 
    • Помечено в качестве ответа Otkinant 30 ноября 2016 г. 15:35
    30 ноября 2016 г. 9:41
  • Покажите, пожалуйста, полное содержимое тела обработчика. А также поясните, какие именно значения Вы вводите в textBox-ы.

    Поясню смысл своих вопросов. Ваш код может компилироваться, но он потенциально опасен. Метод Parse ожидает конкретный символ-разделитель целой и дробной части числа в зависимости от текущих региональных установок. Если языком системы является Английский - ожидается точка, если Русский - запятая. При наличии неверного символа-разделителя Parse генерирует исключение о неверном формате строки. Если Вы "глотаете" эти исключения, то в label ничего и не должно появиться. Потому я и прошу показать полный код обработчика.

    Если Вы хотите вводить привычную для программистов на C++ точку при русской локализации системы, в Parse нужно добавить еще один параметр:

    a = System::Double::Parse(this->textBox1->Text, CultureInfo::InvariantCulture);

    Класс CultureInfo объявлен в пространстве System::Globalization.

    Ну, и типы данных, разумеется, нужно подбирать совместимые (double - Double, float - Single).


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Otkinant 30 ноября 2016 г. 15:33
    30 ноября 2016 г. 10:32