как сделать функции триггера для данных в текстовых полях Windows - PullRequest
1 голос
/ 03 июня 2010

вы должны конвертировать из строк в удвоение? если так. как?

Существуют ли функции для trig, которые будут принимать строковые данные текстового поля как есть?

Есть ли способ извлечь данные из текстового поля в виде числового значения, а не в виде строки?

Ответы [ 4 ]

3 голосов
/ 03 июня 2010

вы должны конвертировать из строк в удвоение? если так. как? * * 1002

Да. Есть несколько способов сделать это.

Существуют ли функции для trig, которые будут принимать строковые данные текстового поля как есть?

Нет, но если вы действительно хотели, вы могли бы легко реализовать такую ​​функцию, используя один из методов, описанных в вышеупомянутом вопросе.

Обычно вы хотите проверить ввод пользователя, чтобы убедиться в его правильности, прежде чем использовать его, и проверка ввода в числовой форме намного проще, чем проверка необработанной строки.

Есть ли способ извлечь данные из текстового поля в виде числового значения, а не в виде строки?

Может быть; это полностью зависит от того, какой графический интерфейс вы используете.

2 голосов
/ 03 июня 2010
вы должны преобразовать из строк в удвоение?

Да.

если так. как?

Способ C ++ - использовать строковые потоки; в частности, вы, вероятно, захотите использовать <a href="http://www.cplusplus.com/reference/iostream/istringstream/" rel="nofollow noreferrer" title="istringstream - C++ Reference">istringstream</a>. Жизнеспособная альтернатива - следовать по пути C, то есть использовать <a href="http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/" rel="nofollow noreferrer" title="sscanf - C++ Reference">sscanf</a> с соответствующим спецификатором формата ("% f").

Другой вариант C ++ - использовать повышение <a href="http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm" rel="nofollow noreferrer" title="lexical_cast">lexical_cast</a>, но начинать использовать повышение только для lexical_cast, на мой взгляд, немного излишне.

Пример с istringstream:

#include <sstream>
// ...
std::istringstream strParser(yourString);
double yourDouble;
strParser>>yourDouble;
if(strParser.fail())
{
    // the string couldn't be converted to a double
}
else if(!strParser.eof())
{
    // the string hasn't been fully consumed; this may or may not be a problem, depending on your needs
}
Существуют ли функции для trig, которые будут принимать строковые данные текстового поля как есть?

AFAIK нет, они не нужны (хотя вы можете написать их довольно легко).

Есть ли способ извлечь данные из текстового поля в виде числового значения, а не в виде строки?

WinAPI предоставляют несколько таких «вспомогательных функций» для использования в диалогах, но я могу вспомнить только одну, которая предоставляет такую ​​помощь: <a href="http://msdn.microsoft.com/en-us/library/ms645485%28VS.85%29.aspx" rel="nofollow noreferrer" title="GetDlgItemInt Function (Windows)">GetDlgItemInt</a>, которая, как следует из названия, работает только для целых чисел.

Добавление

Теперь я вижу, что вы используете C ++ / CLI (вы упомянули System :: String): ну, вы должны были сказать, что это немного меняет параметры.

В управляемом мире ваш лучший вариант - использовать метод <a href="http://msdn.microsoft.com/en-en/library/fd84bdyt.aspx" rel="nofollow noreferrer" title="Double.Parse Method (String)">Double::Parse</a>; для перехвата плохо отформатированных строк вы должны либо перехватить исключения, выданные Double::Parse, либо вызвать <a href="http://msdn.microsoft.com/en-us/library/994c0zb1.aspx" rel="nofollow noreferrer" title="Double.TryParse Method (String, Double %)">Double::TryParse</a> перед вызовом Double::Parse.

Добавление бис

Ох, я забыл, поскольку вы используете .NET Framework, вероятно, лучше использовать тригонометрические функции .NET (класс <a href="http://msdn.microsoft.com/en-us/library/system.math.aspx" rel="nofollow noreferrer" title="Math Class (System)">System.Math</a>).

2 голосов
/ 03 июня 2010

Я бы рекомендовал использовать strtod

char *str = ...;
const char *end;
double d = strtod(str, &end);
if (*end != '\0')
{
    // questionable data
}
1 голос
/ 03 июня 2010

Насколько я знаю, прямого преобразования из текстового поля в удвоение невозможно. Сначала вам нужно конвертировать в двойное число, например strtod .

Вы можете легко создать универсальную функцию, которая принимает элемент управления textbox в качестве аргумента и возвращает двойное значение (при условии, что это текстовое поле содержит допустимое число).

...