| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
tyloya Master

Registrado: 20 Ago 2002Mensajes: 175
|
Publicado: Dom 17 Nov, 2002 5:43 pm Asunto: Problema con TEdit |
|
|
Hola
Para que en un TEdit sólo pueda introducir un valor n que cumpla: 0<=n<= 63 ,cómo puedo hacerlo, en qué evento del TEdit tengo que controlar los datos
que introduzco en ese.
Lo que tengo implementado en esto, pero el problema está en que cuando he
introducido un valor y lo borro, al detectar que el valor que contiene el TEdit
es nulo acaba el programa porque en el evento OnChange el valor de s es nulo
y no lo puede convertir a entero.
He probado a que detecte si es nulo antes de transformarlo a entero con un :
if (first->Text==NULL)
{ s=first->Text;
s='0';
n=StrToInt(s);
}
Pero si hago lo anterior, aunque el TEdit first sea NULL no lo detecta.
void __fastcall TFiltroVal::firstChange(TObject *Sender) file://OnChange
{
AnsiString s, v;
int n;
s+=first->Text;
n=StrToInt(s);
if ((n>63)||(n<0))
{
first->Text= 0;
ShowMessage("Valores entre 0-63");
}
}
void __fastcall TFiltroVal::firstKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
switch (Key)
{
case VK_RETURN:
case VK_BACK:
case VK_DELETE:
case VK_TAB:
break;
default:
Key = 0;
break;
}
}
void __fastcall TFiltroVal::lastKeyPress(TObject *Sender, char &Key)
{
// Si no es un dígito numérico ni la tecla de borrado
if ((Key < '0' || Key > '9') && Key !=
Key = 0; // no admitir la pulsación
} |
|
| Volver arriba |
|
 |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Dom 17 Nov, 2002 8:58 pm Asunto: |
|
|
Prueba con "" en vez de NULL
if (Edit1->Text=="")...... |
|
| Volver arriba |
|
 |
gushynet Cdt

Registrado: 14 Nov 2002Mensajes: 18
|
Publicado: Dom 17 Nov, 2002 10:49 pm Asunto: |
|
|
prueba a controlar esa condicion desde el evento OnKeyPress.
Uno de sus parametros es una referencia a un tipo char que indica que tecla pulsaste.
Espero haberte ayudado
Saludos y suerte |
|
| Volver arriba |
|
 |
tyloya Master

Registrado: 20 Ago 2002Mensajes: 175
|
Publicado: Dom 17 Nov, 2002 11:17 pm Asunto: |
|
|
Ya lo hice, pero al intentar ver el valor que guarda el TEdit en
ese momento en el campo Text, me aparece NULL , aunque tenga
otro valor.
Si se te ocurre cualquier otra cosa será bienvenida.
Gracias de todas formas. |
|
| Volver arriba |
|
 |
tyloya Master

Registrado: 20 Ago 2002Mensajes: 175
|
Publicado: Dom 17 Nov, 2002 11:18 pm Asunto: |
|
|
| También probé con eso, pero no lo coge. |
|
| Volver arriba |
|
 |
gushynet Cdt

Registrado: 14 Nov 2002Mensajes: 18
|
Publicado: Lun 18 Nov, 2002 9:48 am Asunto: |
|
|
Espero que con este codigo te ayude:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
//En este evento controlas que lo que se inserte sea un digito
{
if ((Key<'0')||(Key>'9'))
{
Key = 0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
//en este envento controlas la condicion que necesitas
{
int a;
if(Edit1->Text != "")
{
//StrToInt pasa un AnsiString a Integer.Pregunto si el Edit = "" porque la funcion genera una excepcion si se produce un error al pasar un string a entero, en este caso la ristra vacia no se puede pasar a entero. Y no interesa que entre en este bloque si el edit esta vacio y no hay nada que controlar.
a = StrToInt(Edit1->Text);//se puede prescindir de la variable a
if((a<0)||(a>63))
Edit1->Text = "";
}
}
Bueno esto es lo primero que se me ha ocurrido, espero que esto te sirva. |
|
| Volver arriba |
|
 |
|