¿Cómo forzar que un campo de un formulario sea obligatorio rellenar?

Espero me puedas ayudar con esto: tengo un formulario donde quiero forzar al usuario a no dejar información incompleta y/o campos vacíos.
Tengo esto en los textbox en el evento "valid":
IF EMPTY(thisform.txtdesc_banco.Value)
WAIT WIND "Ingrese el nombre de la Entidad Bancaria...Gracias"
RETURN .F.
ELSE
RETURN .t.
Endif
Mi pregunta, ¿es cómo hago esto para un "COMBO"? (Lista desplegable), Cómo forzar a que se haga una selección de la lista y que no la dejen vacía.

1 respuesta

Respuesta
1
Pues también puedes usar la propiedad "Value" del combo (igual en el evento "Valid") en caso de que quisieras forzar a los usuarios a que seleccionen una de las opciones que tiene el combo y no una que pudieran ellos teclear.
** Evento "Valid" del combo
IF EMPTY(ThisForm.cmbTuCombo.Value)
RETURN .F.
ELSE
RETURN .T.
Endif
Ahora que si lo que quieres es validar el texto que tenga el combo, así haya sido tecleado por el usuario y no sea ninguno de los elementos de la lista, puedes usar la propiedad "DisplayValue" en vez de la de "Value".
IF EMPTY(ThisForm.cmbTuCombo.DisplayValue)
...
Gracias por responder. Aplique lo que me indicas, pero realmente no se qué hago mal. Me disculpo por ello, pero recién comienzo a trabajar con esto.
Acá te copio el código de mi formulario en cada uno de sus eventos.
En el form1, evento: init:
PUBLIC vcod_banco
SELECT bancos
SET ORDER TO cod_banco
Go Bottom
vcod_banco=cod_banco +1
ThisForm.txtcod_banco.Value=vcod_banco
ThisForm.txtdesc_banco.Value=SPACE (60)
ThisForm.combo1.Value=SPACE (40)
thisform.txtcuenta.value=SPACE(20)
botón GUARDAR, evento: click:
nRec=RECNO()
resp=MESSAGEBOX("¿Verificó que la información ingresada es correcta?",4+32+256,"¡ATENCION!")
IF Resp=6
ENDIF
SELECT bancos
LOCATE FOR bancos.cod_banco = ThisForm.txtcod_banco.Value
IF .NOT.FOUND()
APPEND BLANK
REPLACE cod_bancoWITH ThisForm.txtcod_banco.Value
REPLACE desc_bancoWITH ThisForm.txtdesc_banco.Value
REPLACE combo1WITH ThisForm.txttipo.Value
replace cuentaWITH thisform.txtcuenta.Value
ENDIF
ThisForm.txtdesc_banco.SetFocus
botón NUEVO, evento: click:
PUBLIC vcod_banco
SELECT bancos
APPEND BLANK
Go Bottom
vcod_banco=cod_banco +1
ThisForm.txtcod_banco.Value=vcod_banco
Thisform.txtdesc_banco.Enabled = .t.
Thisform.combo1.Enabled = .t.
Thisform.txtcuenta.Enabled = .t.
*******************************************
ThisForm.txtdesc_banco.Value=SPACE (60)
ThisForm.combo1.Value=SPACE (40)
thisform.txtcuenta.value=SPACE(20)
thisform.txtdesc_banco.setfocus
en cada textbook, evento: Valid: (tengo solo 2 textbook)
IF EMPTY(thisform.txtdesc_banco.Value)
WAIT WIND "Ingrese el nombre de la Entidad Bancaria...Gracias"
RETURN .F.
ELSE
RETURN .t.
ENDIF
en el combo, evento: Valid:
IF EMPTY(ThisForm.combo1.displayValue)
RETURN .F.
ELSE
RETURN .T.
Endif
Efectivamente me impide ir a otro campo sin que antes ingrese información, pero en el combo no me hace nada. Lo otro es que igual ponga lo que ponga en el formulario todo se guarda en la tabla, pero se sobreescribe la información. ¿Qué debo hacer y donde?
Gracias Mil.
Mm pues está bastante raro, debería funcionar. Yo hice la prueba en Visual FoxPro 9 con el mismo código que tú utilizas y funciona. Manda un poco más de información respecto al problema, como por ejemplo:
- Versión de Visual FoxPro que utilizas
- Propiedades que hayas cambiado en el Combo, si cambiaste alguna
- Valores de las propiedades: Style, RowSource y RowSourceType
- ¿La validación falla después de dar clic en alguno de los botones o desde el principio?
- Otros detalles que se te ocurran para reproducir el problema.
Un detalle que veo (que de cualquier forma no tiene nada que ver con el problema) es que le asignas un valor al inicializar el combo (ThisForm.combo1.Value=SPACE (40)) y no veo que en ningún momento llenes la lista del combo, como por ejemplo con una tabla o un arreglo. Entonces, ¿para qué utilizas el combo?
En cuanto a lo de que todo se guarda pongas lo que pongas, no entiendo bien a qué te refieres. ¿En qué casos no se debería guardar? O si puedes darme un poco más de detalles sobre esto sería más fácil. Aunque también considero que esto debería estar en otra pregunta, no importa que estén las dos activas.
Hola buen día! Muchísimas gracias por tu tiempo. Lo agradezco enormemente.
- La versión de FoxPro que utilizo es la 7.0 en Español.
- El formulario de forma general esta organizado de la siguiente forma:
Tabla:BANCOS:cod_banco = Tipo: numérico, Ancho: 2, Índice: Ascendente.
desc_banco=Carácter, Ancho: 60.
tipo=Carácter, Ancho:40.
cuenta=Carácter, Ancho: 20.
Formulario:BANCOS: Entorno de datos: Tabla: Bancos.
Texbox: txtcod_banco, txtdesc_banco y txtcuenta.
Combo: combo1 = tipo (en el Generador indiqué que los datosfueran introducidos manualmente y coloque mis 2 opciones: Ahorro yCorriente)
Propiedades del combo1: Style: 0-Cuadro desplegable, ROwSouce: AHORRO, CORRIENTE, RowSourceType: 1-Valor
En el resto del formulario tengo exactamente lo que copie en la consulta anterior, donde te dejé el código que tengo en cada evento y botones.
No quiero intentar con otros formularios hasta tanto éste, que es el más sencillo me funcione bien. He realizado varias pruebas, he cambiado varias veces los código con ejemplos de otros programas, y no doy con un buen funcionamiento.
Gracias.
Mis correos: [email protected] y @gmail.com.
<pre>Mm pues sigue estando muy raro. Ya hice la prueba en Visual FoxPro 7 y también funciona.
Te mandé el formulario que hice de prueba por correo. Lo hice en base a lo que te entendí y con el mismo código. Haz la prueba con ese formulario y dime si en ese también tienes el problema. En caso de no ser así, verifica cuál es la diferencia, e igual puedes decirme para tratar de ver qué es lo que está pasando.
Lo mandé al correo que me pasaste: [email protected]
Por otro lado, creo que hay otras opciones para lograr lo que estás tratando de hacer, que según entiendo es básicamente agregar registros a una tabla mediante un formulario, que podrían tener mejores resultados, al menos yo preferiría otras. Pero de cualquier forma así también debe funcionar.
Revísalo y manda tus comentarios. Suerte.
Nota: Los archivos del formulario están comprimidos con WinRAR, por lo tanto necesitarás dicho programa (WinRAR) para poder verlos.
</pre>
<pre>Sí, entiendo, pero ese es otro problema. ¿Qué pasó con lo de la validación del campo vacío? ¿Funcionó con el ejemplo que te pasé? ¿Qué ha sucedido con eso?
En cuanto a lo de que no se graban los nuevos registros, déjame modificar el ejemplo para que funcione esa parte y más tarde te mando el resultado. Igual sugiero que para esto último abras una nueva pregunta, pues es un tema diferente.
</pre>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas