Page 1 of 1

Combobox no Cambia

Posted: Wed Nov 18, 2020 4:56 pm
by JoseAlvarez
Saludos a Todos, amigos foristas.

Nuevamente acudo a Uds. en busca de ayuda.

Tengo esta situacion usando dos Combobox dentro de un TFolderEx

en el primer combo, al seleccionar cualquier elemento, se ejecuta bien el On Change... esa es la idea. Aqui no hay problema.
no asi el segundo combo, el cual ejecuta On Change SOLO cuando selecciono del segundo valor del array en adelante...

Me explico de otra manera..

valores del primer combo aArray1:= { "Var1_1", "Var1_2", "Var1_3" )
valores del segundo combo aArray2:= { "Var2_1", "Var2_2", "Var2_3" )

al seleccionar en el combo uno, bien sea "Var1_1" , "Var1_2" o "Var1_3" se ejecuta ON CHANGE. Todo Bien

al seleccionar en el combo dos , el primer elemento, en este caso "Var2_1" NO se ejecuta ON CHANGE, puedo seleccionarlo mil veces y no ocurre nada
mientras que si selecciono "Var2_2", "Var2_3" ON CHANGE se ejecuta perfectamente...

Redefine ComboBox oCbxPresenta Var cCbxPresenta items aArreglo_Presenta Id 4001 of oFolder:aDialogs[2] on Change ( Fnct_ChangePresenta() )
Redefine ComboBox oCbxColores Var cCbxColor items aArreglo_Colores Id 4002 of oFolder:aDialogs[2] on Change ( Fnct_ChangeColores () )

de hecho, haciendo la siguiente prueba,

Redefine ComboBox oCbxPresenta Var cCbxPresenta items aArreglo_Presenta Id 4001 of oFolder:aDialogs[2] on Change (msginfo('Hola 1') ,Fnct_ChangePresenta() )

Redefine ComboBox oCbxColores Var cCbxColor items aArreglo_Colores Id 4002 of oFolder:aDialogs[2] on Change ( msginfo('Hola 2') , Fnct_ChangeColores() )

Puedo Ver HOLA 1 siempre, pero HOLA DOS solo cuando seleccione un elemento diferente al primero.

Una vez seleccionado cualquier elemento del 2do en adelante, SI se ejecuta el on change al seleccionar el primero.

ambos combos se crean desde recursos .RC con Pelles C. tienen exactamente las mismas propiedades.

Los Valores Iniciales de las variables de Captura de los combos , (cCbxPresenta y cCbxColor), tienen al inicio el valor de "Agregar" que NO esta dentro de los arreglos.
Sin embargo, el primero funciona, el segundo no.
Los combos Son estilo DropDown

Alguna idea de que puede estar pasando?

Fw17.01, PellesC, xHarbour, Borland 5.5

Re: Combobox no Cambia

Posted: Wed Nov 18, 2020 5:27 pm
by karinha
Muestre algo asi...

Code: Select all

FUNCTION Main()

   LOCAL ARRITEM := { "ICMS 00 - Tributada Integralmente", ;
                      "ICMS 10 - Tributada com cobrança do ICMS por substituicao tributaria", ;
                      "ICMS 20 - Com reducao da base de calculo", ;
                      "ICMS 30 - Isenta ou nao tributada e com cobranca do ICMS por substituicao tributaria", ;
                      "ICMS 40 - Isenta", ;
                      "ICMS 41 - Não tributada", ;
                      "ICMS 50 - Suspensao", ;
                      "ICMS 51 - Diferimento", ;
                      "ICMS 60 - Cobrado anteriormente por substituicao tributaria", ;
                      "ICMS 70 - Com reducao da base de calculo e cobranca do ICMS por substituicao tributaria", ;
                      "ICMS 00 - Outras" }

   LOCAL ARRITEM3 := { "Margem Valor Agregado", ;
                       "Pauta (valor)", ;
                       "Preço Tabelado Max. (valor)", ;
                       "Valor da Operacao" }

   REDEFINE COMBOBOX MOSTRA01 VAR VARPROTB[1] ID 19 ITEMS ARRITEM OF oDlg ;
      WHEN ( OPCAO = "I" .OR. OPCAO = "A" )

   REDEFINE COMBOBOX MOSTRA03 VAR VARPROTB[3] ID 27 ITEMS ARRITEM3 OF oDlg ;
      WHEN ( ( OPCAO = "I" .OR. OPCAO = "A" ) .AND. ;
      ( VARPROTB[1] = ARRITEM[1] .OR. VARPROTB[1] = ARRITEM[2]  .OR. ;
        VARPROTB[1] = ARRITEM[3] .OR. VARPROTB[1] = ARRITEM[10] .OR. ;
        VARPROTB[1] = ARRITEM[11] ) )


   REDEFINE COMBOBOX oCombo1 VAR _Combo1 ITEMS cItemC1 ID 100 OF oDlg ;
      COLOR AZUL , FundoGet UPDATE

   oCombo1:bChange := {|| Valida_Combo1() }

   oTipoVenda:bKeyDown := {|nKey| iif( nKey = VK_RETURN, Valida_Combo1(), ) }

   REDEFINE COMBOBOX oCombo2 VAR _Combo2 ITEMS cItemC2 ID 100 OF oDlg ;
      COLOR AZUL , FundoGet UPDATE


RETURN NIL

STATIC FUNCTION Valida_Combo1()

   IF( codição )

      cItemC2 := { "jjj", "kkk" }

      OItemC2:Enable()

   ELSE

      cItemC2 := { '' }
      cItemC2 := Disable()

   ENDIF

   oCombo2:SetItems( cItemC2 )
   _Combo2 := cItemC2[1]

   oCombo2:Refresh()

RETURN( .T. )


STATIC FUNCTION Valida_Combo1()

   IF( codição )

      cStaC2 := { "xxx", "zzz" }

      OstaC2:Enable()

   ENDIF

   Ostarec:SetItems( cStaRec )
   _starec := cStaRec[1]

   oStaRec:Refresh()


RETURN( .T. )
 
Saludos.

Re: Combobox no Cambia

Posted: Wed Nov 18, 2020 5:57 pm
by JoseAlvarez
Hola Karanha, saludos

Creo entender en tu codigo, que los combox estan relacionados.. en mi caso no, el primer combo no tiene nada que ver con el comportamiento del segundo, ni el segundo con el primero.. son totalmente individuales.. no estan ralacionados.

Re: Combobox no Cambia

Posted: Wed Nov 18, 2020 8:45 pm
by cmsoft
Jose, como inicializas las variables cCbxPresenta y cCbxColor?
Cuando pones en el combo 2 la opcion 2, luego pasas a el combo 1, y luego vuelves al combo 2 y cambias a opcion 1 no te ejecuta la accion?

Re: Combobox no Cambia

Posted: Wed Nov 18, 2020 9:21 pm
by JoseAlvarez
Hola Cesar... saludos.

las inicializo asi:

cCbxPresenta:='Agregar'
cCbxColor :='Agregar'

incluso he tratado con :

cCbxPresenta:=pad('Agregar',xx)
cCbxColor :=pad('Agregar',xx)

para igualar los tamaños.


La situacion es esta:

Ambos combos trabajan de manera totalmente indivivual. Ninguno tiene que ver con el otro. Solo hago referencia al combo 1 para indicar que con este todo esta bien, pero con el segundo que esta construido exactamente igual que el 1, no funciona el on change cuando inicialmente selecciono el primer valor.
Me explico.

Si en el combo2 selecciono el primer valor, no se ejecuta la accion.
Si selecciono cualquier valor diferente al primero, se ejecuta.
Incluso, dentro del mismo combo2 luego de seleccionar cualquier otro valor, vuelvo al primero, la accion se ejecuta.

Es decir, Nunca se ejecuta ON CHANGE cuando "combo2 + valor 1" se realiza como primera accion sobre el objeto.
Luego que selecciono un valor no sea el primero, todo funciona bien.. incluso con el primer valor del combobox

Espero haberme explicado bien, si no es asi, dime y trato de plantearlo de otra manera mas explicita.,

Re: Combobox no Cambia

Posted: Thu Nov 19, 2020 12:27 pm
by JoseAlvarez
Aca dejo un video donde se explica mejor.

Como dije, el problema es en el segundo combo, el primero funciona perfecto y no tiene nada que ver ni hacer con el segundo, solo lo menciono para mostrar que trabaja bien y que asi deberia funcionar el segundo.

http://www.datanet.space/fw/error.webm

Re: Combobox no Cambia

Posted: Thu Nov 19, 2020 1:16 pm
by cmsoft
Hola José:
Según lo que entiendo, cuando en el combo dos tenes una opcion seleccionada distinta de la 1, y lo cambias a la opcion 1, ahi si te ejecuta la accion
Incluso, dentro del mismo combo2 luego de seleccionar cualquier otro valor, vuelvo al primero, la accion se ejecuta.
Si es así, podría ser que el onchange no se ejecute porque al iniciar el dialogo tome como valor el primero de la lista.

Prueba intentando también ejecutar la accion cuando el combo pierde el foco

Code: Select all

oCbxColores:bLostFocus := {||  Fnct_ChangeColores ()}
 
Espero que te sea de utilidad

Re: Combobox no Cambia

Posted: Thu Nov 19, 2020 2:48 pm
by JoseAlvarez
hola cesar.. gracias de nuevo por tu auyda

Probe con el bLostFocus, igual falla, la accion se ejecuta dos veces.

Por lo pronto resolvi de una manera la cual no queria aplicar, pero es la unica hasta el momento.

inclui dentro del arreglo el elemento "agregar" y listo. Funciono.

pero por logica "Agregar" aparece como opcion dentro de la lista desplegada por el combo. Eso Lo solucione con un return .f. en caso de que el usuario lo seleccione.

Aun no veo que tengo de diferente entre el combo1 que funciona perfecto y el dos que falla... siendo el dos una copia exacta del uno... :(

Re: Combobox no Cambia

Posted: Thu Nov 19, 2020 3:43 pm
by cmsoft
Me alegro que lo hayas podido resolver!
Saludos