Page 1 of 1

Refesco

Posted: Thu Aug 09, 2007 9:07 am
by Mike Serra
Buenos días foro:

Tengo en un dialogo desde resursos (Microsoft C++) con un combobox y 2 checks, los checks tienen que estar activados solo cuando se haya seleccionado un valor específico del combo, con el resto de valores tienen que estar desactivados. Por defecto, cuando se activa el dialogo, los check estan activados porque el valor del combo es que el lo activa, pues cuando selecciono un valor que los deviera de desactivar, no se refresca los checks y siguen activos. Solo se desactivan cuando vuelve a coger el foco el combo o cuando pincho sobre cualquiera de los 2 checks. He probado con sysrefres, refrescando los checks en el ON CHANGE del combo, ¿sabeis de que puede ser?

Code: Select all

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE (ocheck1:refresh(),ocheck2:refresh())

ocombo:blostfocus:={||ocheck1:refresh(),ocheck2:refresh()}

redefine checkbox ocheck1 var porprecio id 702 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck2,@porconstructora),sysrefresh()) UPDATE

redefine checkbox ocheck2 var porconstructora id 703 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck1,@porprecio),sysrefresh()) UPDATE
Muchas Gracias.

Posted: Thu Aug 09, 2007 10:38 am
by Antonio Linares
Mike,

Hazlo así:

Code: Select all

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE If( objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA", ( ocheck1:Enable(), ocheck2:Enable() ), ( ocheck1:Disable(), ocheck2:Disable() ) )

redefine checkbox ocheck1 var porprecio id 702 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck2,@porconstructora),sysrefresh()) UPDATE

redefine checkbox ocheck2 var porconstructora id 703 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck1,@porprecio),sysrefresh()) UPDATE

Posted: Fri Aug 10, 2007 7:18 am
by Mike Serra
Perfecto Antonio!! :D

No se por que sería, pero MUCHAS GRACIAS

Posted: Fri Aug 10, 2007 7:25 am
by Antonio Linares
Mike,

Las claúsulas WHEN se evaluan cuando algun control pierde el foco.

En tu caso, estas cambiando la selección del combobox, pero no estás perdiendo su foco, por eso los WHEN no se evalúan.

Con el cambio propuesto ahora tu realizas la misma acción que los WHEN cuando cambia la selección del combobox y no tienes que aguardar a que se cambie el foco.

Posted: Fri Aug 10, 2007 8:17 am
by Mike Serra
La explicación, perfecta, sólo comentarte que en mi ejemplo cuando seleccionaba un valor en el combobox y luego pulsaba intro, ahí si se debería de ejecutar la clausula WHEN, porque si que me saltaba a otro objeto. De todas formas te agradezco enormemente tus soluciones y explicaciones ya que me harán pensar.

UN SALUDO,

Posted: Fri Aug 10, 2007 9:05 am
by Antonio Linares
Mike,

Por favor, prueba tu código original con sólo este cambio:

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE (ocheck1:refresh(),ocheck2:refresh()) VALID ( oDlg:AEvalWhen(), .T. )