Форум — Ответы     (  К темам )
 ?  Андрей: Как проверить тип переменной? (31-03-2003 14:12:34)
Как проверить тип переменной? Например, в Edit->Text вводится какая-то переменнная, как определить ее тип?
 Petro (31-03-2003 17:23:21)
Какой еще тип? Там всегда AnsiString. Ф-цией ToInt можешь int получить, если надо.
 Георгий (31-03-2003 17:24:05)
Ну Edit->Text по определению это тип AnsiString — т.е. только текст.
А знать контекст, в котором это значение введено может только тот, кто его ввёл.
В принципе вопрос не ясно поставлен.
 Андрей (31-03-2003 18:19:14)
Нужно проверить, чтобы в Edit вводились только данные типа int. Как это лучше сделать?
 Art (31-03-2003 19:08:30)
Возьми TMaskEdit, не парься!
 Владимир (31-03-2003 19:40:22)
Можно пойти 2 путями — давать вводить только целые числа,
или давать вводить что угодно, а потом проверять:

Вариант 1 (пишем обработчик onKeyPress)

// позволяем вводить целые и действительные числа
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(Key == ',') Key = '.';
if(Key != VK_BACK && Key != '.' && !isdigit(Key)) { Key=0; return; }
if(Key == '.' && Edit1->Text.Pos(".")) Key = 0;
}
//---------------------------------------------------------------------------


// позволяем вводить только целые числа
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if(Key != VK_BACK && !isdigit(Key)) Key=0;
}
//---------------------------------------------------------------------------

Вариант 2.

try{
int n = Edit1->Text.ToInt();
}catch(EConvertError &){
ShowMessage("Ошибка ввода !"); Edit1->SetFocus();
}

Разумеется первый вариант правильней.
Также не забудьте задать ограничение на количество символов (свойство MaxLength компонента Edit).

А использовать TMaskEdit можно, но не советовал бы, он слишком по своему работает.

 Георгий (31-03-2003 21:35:29)
а есть ещё CSpinEdit — на палитре Samples — по моему самое оно для ввода чисел.