Para mostrar los CheckBoxes en un ListBox y enganchar todo el asunto hasta una tabla, se debe utilizar la propiedades Picture (entre otras cosas) del ListBox. En realidad no son CheckBoxes, son iconos. De hecho, los que estoy usando son más como luces (yo quería dar un ejemplo que se pueda ejecutar desde un PRG). Se puede usar cualquier imagen que desee ... encontrar un par de imágenes realmente buenas de casillas de verificación que están marcadas y desmarcadas y simplemente reemplazar las correspondientes propiedades del Formulario.
El ListBox tiene un Cursor como RowSource y uno de los campos "Checked" se utiliza para realizar un seguimiento de qué registros están marcados o desmarcados. Incluso podría dar un paso más y cambiar el campo marcado a numérico y tener una casilla de verificación MultiEstado con los valores 0, 1 y 2 y utilizar tres imágenes. (Copie y peque el siguiente código en un archivo PRG y ejecútelo desde VFP)
PUBLIC oForm oForm = CREATEOBJECT("clsListCheckBox") oForm.VISIBLE = .T. READ EVENTS DEFINE CLASS clsListCheckBox AS FORM TOP = 1 LEFT = 0 HEIGHT = 473 WIDTH = 287 DOCREATE = .T. CAPTION = "Listbox With Checkboxes" WINDOWSTATE = 0 NAME = "clsListCheckBox" AlwaysOnTop = .T. CheckIcon = HOME() + "Graphics\Icons\Misc\MISC15.ICO" Uncheckicon = HOME() + "Graphics\Icons\Misc\MISC13.ICO" SHOWWINDOW = 2 ADD OBJECT list1 AS LISTBOX WITH ; HEIGHT = 408, ; LEFT = 12, ; SORTED = .T., ; TOP = 48, ; WIDTH = 264, ; NAME = "List1", ; ROWSOURCETYPE = 2, ; ROWSOURCE = "ListCheck" PROCEDURE LOAD LOCAL nCount, nCount2, nWordLength, sItem, nUpper, nLower nUpper = 90 &&ASCII nLower = 65 &&ASCII CREATE CURSOR ListCheck (MyEntry c(35), Checked L) FOR nCount = 1 TO 250 sItem = "" nWordLength = INT((35) * RAND( ) + 1) FOR nCount2 = 1 TO nWordLength sItem = sItem + CHR(INT((nUpper - nLower + 1) * RAND( ) + nLower)) ENDFOR INSERT INTO ListCheck (MyEntry, Checked) VALUES(sItem, .F.) NEXT ENDPROC PROCEDURE Unload USE IN SELECT("ListCheck") CLEAR EVENTS ENDPROC PROCEDURE ListSetup THISFORM.LOCKSCREEN = .T. LOCAL nListCount nListCount = 1 SELECT ListCheck SCAN ALL IF ListCheck.Checked THIS.list1.PICTURE(nListCount) = THISFORM.CheckIcon ELSE THIS.list1.PICTURE(nListCount) = THISFORM.Uncheckicon ENDIF nListCount = nListCount + 1 ENDSCAN THISFORM.LOCKSCREEN = .F. ENDPROC PROCEDURE SetCheck LOCAL nListIndex nListIndex = THIS.list1.LISTINDEX IF nListIndex > 0 GO nListIndex IN "ListCheck" IF ListCheck.Checked THIS.list1.PICTURE(nListIndex) = THISFORM.Uncheckicon ELSE THIS.list1.PICTURE(nListIndex) = THISFORM.CheckIcon ENDIF REPLACE ListCheck.Checked WITH !ListCheck.Checked ENDIF ENDPROC PROCEDURE list1.GOTFOCUS() IF DODEFAULT() THISFORM.ListSetup() ENDIF ENDPROC PROCEDURE list1.CLICK() IF LASTKEY() = 13 THISFORM.SetCheck() ENDIF ENDPROC PROCEDURE list1.KEYPRESS(nKeyCode, nShiftAltCtrl) IF nKeyCode = 13 OR nKeyCode = 32 THISFORM.SetCheck() ENDIF ENDPROC ENDDEFINE
Craig Boyd
Buenos dias, al correr tu programa no muestra la checkbox, solo una columna, es un error o hay que definir la segunda columna. Corri el codigo y asi es como funciona, Saludos
ResponderBorrar