FoxPro/Visual FoxPro - Problema con ComboBox

   
Vista:

Problema con ComboBox

Publicado por Gabriel (406 intervenciones) el 14/11/2009 17:09:29
Que tal amigos :

Nuevamente recurro a vuestros consejos...

Resulta que tengo varios Combobox que los vengo utilizando de una manera digamos optima y funcional para el ingreso y consulta de datos.

El tema esta que al tener un Combobox Expandido no me permite ingresar un nuevo item dentro del mismo, pero si no esta expandido ahi si es posible ingresar un nuevo item e insertarlo dentro del Combobox ya sea a travez de un formulario de ingreso...

Como podria hacer cuando el usuario ingresa recien a un Combobox y este aparezca ya expandido y se detecte un nuevo item el comboBox este ya no este expandido...

Estuve probando el siguiente codigo pero no funciona como lo deseaba...

IF THIS.autodropdown && Aqui me indica que la propiedad no existe estando creada.
IF THIS.Style = 2 AND THIS.ReadOnly && only dropdown lists to have this functionality
RETURN DODEFAULT()
ELSE
IF !MDOWN()
KEYBOARD '{ALT + DNARROW}' PLAIN CLEAR
ENDIF
ENDIF
ENDIF

A la spera de sus sugerencias me despido de ustedes...

atte.,

Gabriel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con ComboBox

Publicado por Pablo (Argentina) (433 intervenciones) el 16/11/2009 13:20:29
Hola Gabriel, como va, Mira te voy a pasar un codigo de Portalfox.com, que tambien ya esta publicado por Maucirio en este mismo foro mas bajo, chequealo que por ahi te sirve y sino avisame y buscamos algo mas.


Yo queria algo más sencillo y encontré ejemplos con combobox, pero ninguno combinaba mis 3 exigencias: busqueda incremental, abierto a nuevos valores, y con la lista desplegada y activa.

Combinando varios articulos y añadiendo nuevo codigo consegui lo que deseaba.

Aquí os dejo el codigo.

********************************
PUBLIC oform1
oform1 = NEWOBJECT("form1")
oform1.SHOW
RETURN

DEFINE CLASS form1 AS FORM
TOP = 0
LEFT = 0
HEIGHT = 190
WIDTH = 480
DOCREATE = .T.
CAPTION = "Form1"
NAME = "Form1"

ADD OBJECT combo1 AS COMBOBOX WITH ;
COMMENT = "", ;
ROWSOURCETYPE = 2, ;
HEIGHT = 25, ;
INCREMENTALSEARCH = .T., ;
LEFT = 30, ;
SELECTONENTRY = .T., ;
TABINDEX = 2, ;
TOP = 28, ;
WIDTH = 350, ;
INPUTMASK = "", ;
NAME = "Combo1"

ADD OBJECT label4 AS LABEL WITH ;
AUTOSIZE = .T., ;
FONTBOLD = .T., ;
BACKSTYLE = 0, ;
CAPTION = "Uno de la lista o nuevo, desplegado", ;
HEIGHT = 17, ;
LEFT = 30, ;
TOP = 12, ;
WIDTH = 207, ;
TABINDEX = 4, ;
FORECOLOR = RGB(88,99,124), ;
NAME = "Label4"

ADD OBJECT command1 AS COMMANDBUTTON WITH ;
TOP = 12, ;
LEFT = 408, ;
HEIGHT = 36, ;
WIDTH = 49, ;
CAPTION = "Salir", ;
TABINDEX = 3, ;
NAME = "Command1"

PROCEDURE LOAD
CAPSLOCK(.F.) && simulo trabajar con minusculas
PUBLIC mf
mf = SYS(2015)
OPEN DATABASE (HOME(2) + "Northwind\Northwind.dbc")
SELECT 0
USE Customers
ENDPROC

PROCEDURE combo1.INIT
* Creo propiedad para almacenar configuracion CapsLock
IF PEMSTATUS(THIS,'lCaps',5) = .F.
WITH THIS
.ADDPROPERTY('lCaps',.F.)
ENDWITH
ENDIF
THIS.COMMENT = ''
ENDPROC

PROCEDURE combo1.KEYPRESS
LPARAMETERS nKeyCode, nShiftAltCtrl
IF BETWEEN(nKeyCode, 32, 122)
* Primero comprueba la lista
FOR X=1 TO THIS.LISTCOUNT
IF UPPER(SUBSTR(THIS.LIST(X), 1, THIS.SELSTART+1)) == ;
UPPER(SUBSTR(THIS.TEXT, 1, THIS.SELSTART)+CHR(nKeyCode))
NCURPOS = THIS.SELSTART + 1
THIS.VALUE = THIS.LIST(X)
THIS.SELSTART = NCURPOS
THIS.SELLENGTH = LEN(LTRIM(THIS.LIST(X))) - NCURPOS
THIS.COMMENT = SUBSTR(THIS.LIST(X),1,NCURPOS)
NODEFAULT
EXIT
ENDIF
NEXT X
* Si no está en la lista
IF X > THIS.LISTCOUNT
NCURPOS = LEN(THIS.COMMENT) + 1
THIS.COMMENT = THIS.COMMENT + CHR(nKeyCode)
THIS.DISPLAYVALUE = THIS.COMMENT
THIS.SELSTART = NCURPOS
NODEFAULT
ENDIF
ENDIF
* Si pulsamos Retroceso o flecha izda.
IF nKeyCode = 127 OR nKeyCode = 19
NCURPOS = LEN(THIS.COMMENT) -1
THIS.COMMENT = LEFT(THIS.COMMENT, NCURPOS)
THIS.DISPLAYVALUE = THIS.COMMENT
THIS.SELSTART = NCURPOS
NODEFAULT
ENDIF
IF nKeyCode = 13
THIS.LOSTFOCUS
ENDIF
ENDPROC

PROCEDURE combo1.LOSTFOCUS
THIS.ROWSOURCE = ''
USE IN SELECT('curcombo')
* Devolvemos config. inicial CapsLock
CAPSLOCK(THIS.lcaps)
* Tiempo busqueda incremental predeterminado
_INCSEEK = 0.5
*
* El dato introducido / seleccionado, se encuentra
* en la propiedad 'DisplayValue'.
*
ENDPROC

PROCEDURE combo1.GOTFOCUS
THIS.lcaps = CAPSLOCK()
IF CAPSLOCK() = .F.
CAPSLOCK(.T.) && Fuerzo a mayúsculas
ENDIF
_INCSEEK = 5.5 && Tiempo busqueda incremental al maximo
LOCAL cFile, cCampo
cFile='customers' && Tabla de la que tomar los datos
cCampo='upper(ltrim(companyname))' && campo a mostrar
SELECT &cCampo AS cDato FROM &cFile DISTINCT WHERE !EMPTY(&cCampo) ;
ORDER BY cDato INTO CURSOR curcombo nofilter
THIS.ROWSOURCE = 'curcombo' && Establecemos origen de datos
KEYBOARD '{ALT+DNARROW}' && Desplegamos lista
*
* Si le pasamos un valor previo (en la propiedad 'DisplayValue'),
* simulamos haberlo tecleado para que se situe en la lista.
*
IF !EMPTY(THIS.DISPLAYVALUE)
cTexto = THIS.DISPLAYVALUE
FOR yy = 1 TO LEN(cTexto)
cLetra = SUBSTR(cTexto, yy, 1)
KEYBOARD cLetra
ENDFOR
ENDIF
ENDPROC

PROCEDURE command1.CLICK
* El dato lo obtenemos de la propiedad 'DisplayValue'
IF !EMPTY(ALLTRIM(THISFORM.combo1.DISPLAYVALUE))
=MESSAGEBOX(THISFORM.combo1.DISPLAYVALUE)
ENDIF
USE IN SELECT('customers')
CLOSE ALL
RELEASE mf
THISFORM.RELEASE
ENDPROC

ENDDEFINE
*-- EndDefine: form1
**************************************************

Suerte!!!!!!!!!!!!!

Pablo - Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con ComboBox

Publicado por Gabriel (406 intervenciones) el 16/11/2009 21:21:19
Que tal Amigo Pablo :

Justamente hace unos dias lei dicho articulo y estaba estudiandolo y probandolo pero me indicaba un error por no tener creo la tabla correcta...

Pero logre hacerlo funcionar y efectivamente se puede ingresar un nuevo item teniendo el ComboBox expandido solo faltaria al final del ingreso insertarle la rutina que me permita grabar dicho iten en la tabla...

Dicho sea de paso en mi rutina que es muy practica y funcional ya tiene esa parte incluida...

Solo bastara hacer creo unos ajustes y veremos...

Saludos...

Gabriel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con ComboBox

Publicado por EDWIN (4 intervenciones) el 12/01/2010 00:59:44
yo aun no encuentro la manera de hacer que el incrementalsearch sejecute sobre la segunda columna de un combobox.
podrian ayudarme?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar