Hi.
I want to make a checklistbox class with field in the controlsource represent the checklistbox value.
Here is my code, I use listbox.
I use a field C(5) with '0' or '1' value.
Maximum checklistbox option is 5 equal to length of the field.
Example: Value in the field='11001'
In Checklistbox shows:
-----------------
[X] CHECK1
[X] CHECK2
[ ] CHECK3
[ ] CHECK4
[X] CHECK5
-----------------
ROWSOURCETYPE IS VALUE
-------------------------------------------
PROC CHECKLISTBOX1.INIT
PUBLIC MAXOPTIONS
MAXOPTIONS=10
PUBLIC ARRAY SELECTEDINDEX(MAXOPTIONS)
PUBLIC fieldname
FIELDNAME=THIS.CONTROLSOURCE
FOR I=1 TO MAXOPTIONS
OPTIONS= SUBSTR(&FIELDNAME,i,1)
IF OPTIONS='1'
SELECTEDINDEX=.T.
ELSE
SELECTEDINDEX=.F.
ENDIF
ENDFOR
ENDPROC
--------------------------------------------
PROC CHECKLISTBOX1.INTERAKTIFCHANGE
FIELDNAME=THIS.CONTROLSOURCE
SELECTEDINDEX[THIS.LISTINDEX]=NOT SELECTEDINDEX[THIS.LISTINDEX]
newdata=&fieldname
IF SELECTEDINDEX[THIS.LISTINDEX]
newdata=SUBSTR(NEWDATA,1,THIS.ListIndex-1)+'1'+SUBSTR(NEWDATA,THIS.ListIndex+1,MAXOPTIONS-THIS.LISTINDEX)
REPLACE &FIELDNAME WITH newdata
ELSE
newdata=SUBSTR(NEWDATA,1,THIS.ListIndex-1)+'0'+SUBSTR(NEWDATA,THIS.ListIndex+1,MAXOPTIONS-THIS.LISTINDEX)
REPLACE &FIELDNAME WITH newdata
ENDIF
THIS.REFRESH
ENDPROC
--------------------------------------------
PROC CHECKLISTBOX1.REFRESH
FOR I=1 TO MAXOPTIONS
IF SELECTEDINDEX
THIS.Picture=ALLTRIM(SYS(5))+'\BITMAP\CROSSSMALLE.JPG'
ELSE
THIS.Picture=ALLTRIM(SYS(5))+'\BITMAP\EMPTYSMALL.JPG'
ENDIF
ENDFOR
ENDPROC
--------------------------------------------
The problem is the field value change to 'CHECK1'.
Is my way correct? If it's not, how?
Thank you guys.
I want to make a checklistbox class with field in the controlsource represent the checklistbox value.
Here is my code, I use listbox.
I use a field C(5) with '0' or '1' value.
Maximum checklistbox option is 5 equal to length of the field.
Example: Value in the field='11001'
In Checklistbox shows:
-----------------
[X] CHECK1
[X] CHECK2
[ ] CHECK3
[ ] CHECK4
[X] CHECK5
-----------------
ROWSOURCETYPE IS VALUE
-------------------------------------------
PROC CHECKLISTBOX1.INIT
PUBLIC MAXOPTIONS
MAXOPTIONS=10
PUBLIC ARRAY SELECTEDINDEX(MAXOPTIONS)
PUBLIC fieldname
FIELDNAME=THIS.CONTROLSOURCE
FOR I=1 TO MAXOPTIONS
OPTIONS= SUBSTR(&FIELDNAME,i,1)
IF OPTIONS='1'
SELECTEDINDEX=.T.
ELSE
SELECTEDINDEX=.F.
ENDIF
ENDFOR
ENDPROC
--------------------------------------------
PROC CHECKLISTBOX1.INTERAKTIFCHANGE
FIELDNAME=THIS.CONTROLSOURCE
SELECTEDINDEX[THIS.LISTINDEX]=NOT SELECTEDINDEX[THIS.LISTINDEX]
newdata=&fieldname
IF SELECTEDINDEX[THIS.LISTINDEX]
newdata=SUBSTR(NEWDATA,1,THIS.ListIndex-1)+'1'+SUBSTR(NEWDATA,THIS.ListIndex+1,MAXOPTIONS-THIS.LISTINDEX)
REPLACE &FIELDNAME WITH newdata
ELSE
newdata=SUBSTR(NEWDATA,1,THIS.ListIndex-1)+'0'+SUBSTR(NEWDATA,THIS.ListIndex+1,MAXOPTIONS-THIS.LISTINDEX)
REPLACE &FIELDNAME WITH newdata
ENDIF
THIS.REFRESH
ENDPROC
--------------------------------------------
PROC CHECKLISTBOX1.REFRESH
FOR I=1 TO MAXOPTIONS
IF SELECTEDINDEX
THIS.Picture=ALLTRIM(SYS(5))+'\BITMAP\CROSSSMALLE.JPG'
ELSE
THIS.Picture=ALLTRIM(SYS(5))+'\BITMAP\EMPTYSMALL.JPG'
ENDIF
ENDFOR
ENDPROC
--------------------------------------------
The problem is the field value change to 'CHECK1'.
Is my way correct? If it's not, how?
Thank you guys.