Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > контроль ввода данных


Автор: Solomon 20.9.2006, 15:27
с помощью каких функций можно определить введено в текстовое поле чилсо и нечисло а просто текст... Насколько я знаю в кампиляторах Boland есть такие функции...

p.s. Поиском пытался найти так ничего и не нашол

Добавлено @ 15:30 
Все нашол... извеняюсь за флуд smile . Тема закрыта )

Автор: Solomon 20.9.2006, 15:45
мдяя.. найти нашол, но чет оно не пашит smile
Так что вопрос еще открыт smile

Автор: Yra 20.9.2006, 15:59
isalpha(char) - true, если аргумент - символ алфавита
isdigit(char) - true, если арг. - (0...9) 

Автор: Solomon 20.9.2006, 16:08
Это когда у нас один символ... и эту проверку надо делать непосредственно при вводе каждого символа, можно конечно, но для начала бы хотелось мне узнать куда эту проверку именно вставить...
Я вообщето себе это представлял немного по другому... Вводиш в поле текст и нажимаеш кнопку "Далее", если введено число то производились бы расчеты и выводился бы результат. А если введен просто текст... то при нажатии "Далее" ничего бы не происходило до тех пор пока небудет введено число или выкидывался соответствующий месседж бокс...

Автор: Yra 20.9.2006, 16:14
В обработчике нажатия кнопки:

len - длинна введёной строки;
name - масив char;

 for (int i = 0; i < len; i++)
  if (isdigit(name[i]))
   ......
  else
   ......

и все... никакой светлой мысли. smile 

Автор: Bunny 20.9.2006, 16:26
Solomon 
а не лучше в обработчике OnKeyPress Edita проверять какая клавиша была нажата?!
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    if (isdigit(Key) || Key == 8); //нажата цифра или backspace
    else Key = 0; 
}

Автор: Solomon 20.9.2006, 16:26
кстати как определить длинну текста введенного в Edit?

Автор: Yra 20.9.2006, 16:36
Цитата(Solomon @ 20.9.2006,  16:26)
кстати как определить длинну текста введенного в Edit?

Цитата

кстати как определить длинну текста введенного в Edit?


Edit1->Text.Lenght();

Автор: Solomon 20.9.2006, 16:37
Bunny,  дякую )) все нормально работает )


Автор: Akeem 20.9.2006, 16:52
Также можно было бы заделать фичу с регулярными выражениями.

Автор: Alexeis 20.9.2006, 17:04
Код

 bool __fastcall TryStrToInt(const AnsiString S, int &Value);

if (TryStrToInt(Edit1->text, n))
ShowMessage("число");

Автор: Bima 21.9.2006, 07:16
вот код простого примера. На форме лежит Edit1 и Label1.
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Kod.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
bool Digit (AnsiString Cifra);//Подпрограмма проверки строки на цифру
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner){}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if (Digit(Edit1->Text))Label1->Caption="Цифра";
else Label1->Caption="Не цифра";
}
//---------------------------------------------------------------------------
bool Digit (AnsiString Cifra)
{
try
    {
    StrToFloat(Cifra);
    return true;
    }
catch(...)//Выполняется в случае ошибки
    {
    return false;
    }
}
//---------------------------------------------------------------------------

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

Хочу обратить внимание!!! при отладкт программы если будет возникать ошибка, компилятор будет ругаться, но с компилированной программой все будет нормально!

Автор: aleks88 23.1.2012, 14:05
В Edit нужно вводить числа, буквы и некоторые символы. Как сделать, чтобы невозможно было ввести первым знаком "пробел" ?

Автор: Данкинг 23.1.2012, 15:14
Проверять: если длина текста в Edit = 0 и символ нажатой клавиши = 32.

Автор: aleks88 23.1.2012, 19:25
Можно более подробно :(

Автор: Данкинг 23.1.2012, 22:55
Код

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if (Key==VK_SPACE && Trim(Edit1->Text.Length())==0)
  {
   MessageDlg("Текст не может начинаться с пробела!", mtInformation,TMsgDlgButtons() << mbYes,0);
   return;
  }
}

Автор: xvr 24.1.2012, 11:19
Еще стоит добавить Key=0; внутрь if'а. А то он сообщение выдаст, но пробел все равно добавит

Автор: borisbn 24.1.2012, 17:17
Вот (в аттаче). Дарю. Как-то делал обёртку над TEdit'ом для ввода и редактирования чисел. В аттаче cpp, h и chm.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)