FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda 3 Combobox Anidados * URGENTE ??
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Tue Sep 06, 2022 03:38 PM
Hola Amigos.

Tengo una necesidad urgente de poder implementar un requerimiento, sobre el uso de Combobox.

Maestro Antonio, me presento un c贸digo para manejar 2 combobox, el cual amablemente Francisco Alegr铆a adapto a mi necesidad y quedo funcionando muy bien.

Este se trata que al seleccionar una Ciudad en su Array, filtra y muestra en el array de comunas, solo las que pertenecen, pero ahora debo agregar un 3er array, que contiene los sectores de cada comuna y que debe ser filtrado seg煤n la comuna seleccionada, final mente obtendr铆a para una ciudad, todas las comunas y para cada comuna todos sus sectores.

Muy agradecido de Francisco por haber modificado este codigo.

Espero haber expuesto bien mi requerimiento.

Muchos saludos.
Antonio

C贸digo Funcional para 2 Combobox anidados:
Code (fw): Select all Collapse
function Prue_Combo()
聽 聽local oDlg, cCiudad, cComuna, oComuna
聽 聽local aCiudades, aComunas, aArr

聽 聽aArr := CrearArrays2()

聽 聽aCiudades := aArr[1]
聽 聽aComunas 聽:= aArr[2]


聽 聽cCiudad := aCiudades[1]
聽 聽cComuna := aComunas[1,1]

聽 聽DEFINE DIALOG oDlg FROM 1,1 TO 300, 600 PIXEL TITLE "Seleccione Ciudad y Comuna"

聽 聽@ 20, 10 COMBOBOX cCiudad ITEMS aCiudades SIZE 130,200 PIXEL OF oDlg ;
聽 聽 聽 聽 聽 聽 ON CHANGE ( oComuna:SetItems( aComunas[ AScan( aCiudades, cCiudad ) ] ), oComuna:Set( oComuna:aItems[ 1 ] ) )

聽 聽@ 20,160 COMBOBOX oComuna VAR cComuna ITEMS aComunas[ 1 ] SIZE 130,200 PIXEL OF oDlg

聽 聽@ 100,(300/2)-(100/2) BUTTON "Mostrar seleccionado" SIZE 100, 20 PIXEL OF oDlg ;
聽 聽 聽 聽 聽 聽 ACTION MsgInfo( cCiudad, cComuna )

聽 聽ACTIVATE DIALOG oDlg CENTERED

return nil

Function CrearArrays2()
聽 聽local aArray1 := {}, aArray2 := {}, aItems := {}, nVar, n
聽 聽local aCiudades:={ { 1,'ARICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 2,'PARINACOTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 3,'IQUIQUE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'TAMARUGAL'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'ANTOFAGASTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 49,'SANTIAGO'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 54,'TALAGANTE'} }

聽 聽local aComunas:= { { 1,'ARICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 1,'CAMARONES'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 2,'PUTRE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 2,'GENERAL LAGOS'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 3,'IQUIQUE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 3,'ALTO HOSPICIO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,'POZO ALMONTE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,'CAMI脩A'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,'COLCHANE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,'HUARA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,'PICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,'ANTOFAGASTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,'MEJILLONES'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,'SIERRA GORDA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,'TALTAL'} }

聽 聽local aSector= { { 1,1,'CERRO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 1,2,'COSTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 2,1,'CENTRO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 2,2,'COSTA SUR'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 3,1,'VALLE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 3,2,'ALTO PIREN'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,1,'ALTO BLANCO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,2,'VALLE VERDE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,3,'RIO MAIPO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,4,'ALTO JAHUEL'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 4,5,'SAN JORGE'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,1,'SAN LEON'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,2,'CERRILLOS'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,3,'SAN ADOLFO'},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 { 5,4,'EL MONTE'} }




聽 For n := 1 To Len(aCiudades)
聽 聽 聽 aadd(aArray1, aCiudades[n,2])
聽 聽 聽 nVar := aCiudades[n,1]
聽 聽 聽 aItems := {}
聽 聽 聽 AEval( aComunas, {|a| if(a[1] == nVar, aadd(aItems, a[2]),) } )
聽 聽 聽 if( len(aItems) = 0, aadd(aItems,"Sin Valor"), nil )
聽 聽 聽 aadd(aArray2, aItems)
聽 Next

聽 SysRefresh()

Return { aArray1, aArray2 }
FWH 22.10 - HARBOUR - PELLES C
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda Urgente con Combobox Anidados ??
Posted: Wed Sep 07, 2022 12:22 AM

Amigos.

Alguna posibilidad?

Saludos

Antonio

FWH 22.10 - HARBOUR - PELLES C
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ayuda Urgente con Combobox Anidados ??
Posted: Wed Sep 07, 2022 03:08 AM
Ac谩 te dejo el ejemplo, prueba y comenta.
Code (fw): Select all Collapse
#include "fivewin.ch"
function Prue_Combo()
   local oDlg, cCiudad, cComuna, oComuna
   local aCiudades, aComunas, aArr, nZ1, nZ2, encon,i, nZona

   aArr := CrearArrays2()

   aCiudades := aArr[1]
   aComunas  := aArr[2]


  // cCiudad := aCiudades[1]          <----- Aqui siempre se ubica en el primer registro
  // cComuna := aComunas[1,1]         <----- Aqui siempre se ubica en el primer registro

   cCiudad := 'TAMARUGAL'              // <----- Aqui le asigno un valor cualquier, donde quiero que se ubique
   cComuna := 'COLCHANE'          // <----- Aqui le asigno un valor cualquier, donde quiero que se ubique


****** Aqui aplico tu rutina para ubicar la Comuna y lo hace muy bien

nZ1:=0
nZ2:=0
encon:=.F.
FOR i := 1 to len(aComunas)
     nZona := ascan(aComunas[i],Trim(cComuna))
     IF nZona > 0
        encon := .T.
        //MsgInfo("La posicion es " + str(i)+ ","+ str(nZona))
        nZ1:=i
        nZ2:=nZona
     ENDIF
NEXT i
IF !encon
    MsgInfo("No lo encontro")
ENDIF

// El Proble que nunca se ubica el la comuna seleccionada en el combobox, siempre lo hace en el primer elemento



   DEFINE DIALOG oDlg FROM 1,1 TO 300, 600 PIXEL TITLE "Seleccione Ciudad y Comuna"

   @ 20, 10 COMBOBOX cCiudad ITEMS aCiudades SIZE 130,200 PIXEL OF oDlg ;
            ON CHANGE ( oComuna:SetItems( aComunas[ AScan( aCiudades, cCiudad ) ] ), oComuna:Set( oComuna:aItems[ 1 ] ) )

   @ 20,160 COMBOBOX oComuna VAR cComuna ITEMS aComunas[ 1 ] SIZE 130,200 PIXEL OF oDlg                   // <------- Aqui necedito que se muestre al ingresar la comuna seleccionada
   
   @ 100,(300/2)-(100/2) BUTTON "Mostrar seleccionado" SIZE 100, 20 PIXEL OF oDlg ;
            ACTION MsgInfo( cCiudad, cComuna )
  
   ACTIVATE DIALOG oDlg CENTERED ON INIT (oComuna:SetItems( aComunas[ nZ1] ), oComuna:Set( nZ2 ))   //<- Creo que te faltaba esto

return nil

Function CrearArrays2()
   local aArray1 := {}, aArray2 := {}, aItems := {}, nVar, n
   local aCiudades:={ { 1,'ARICA'},;
                { 2,'PARINACOTA'},;
                { 3,'IQUIQUE'},;
                { 4,'TAMARUGAL'},;
                { 5,'ANTOFAGASTA'},;
                { 49,'SANTIAGO'},;
                { 54,'TALAGANTE'} }

   local aComunas:= { { 1,'ARICA'},;
                { 1,'CAMARONES'},;
                { 2,'PUTRE'},;
                { 2,'GENERAL LAGOS'},;
                { 3,'IQUIQUE'},;
                { 3,'ALTO HOSPICIO'},;
                { 4,'POZO ALMONTE'},;
                { 4,'CAMI脩A'},;
                { 4,'COLCHANE'},;
                { 4,'HUARA'},;
                { 4,'PICA'},;
                { 5,'ANTOFAGASTA'},;
                { 5,'MEJILLONES'},;
                { 5,'SIERRA GORDA'},;
                { 5,'TALTAL'} }


// Aqu铆 se generan los nuevos Array para hacer los filtro del combobox


  For n := 1 To Len(aCiudades)
      aadd(aArray1, aCiudades[n,2])
      nVar := aCiudades[n,1]
      aItems := {}
      AEval( aComunas, {|a| if(a[1] == nVar, aadd(aItems, a[2]),) } )
      if( len(aItems) = 0, aadd(aItems,"Sin Valor"), nil )
      aadd(aArray2, aItems)
  Next

  SysRefresh()

Return { aArray1, aArray2 }
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda Urgente con Combobox Anidados ??
Posted: Wed Sep 07, 2022 03:34 AM
cmsoft wrote:Ac谩 te dejo el ejemplo, prueba y comenta.
Code (fw): Select all Collapse
#include "fivewin.ch"
function Prue_Combo()
聽 聽local oDlg, cCiudad, cComuna, oComuna
聽 聽local aCiudades, aComunas, aArr, nZ1, nZ2, encon,i, nZona

聽 聽aArr := CrearArrays2()

聽 聽aCiudades := aArr[1]
聽 聽aComunas 聽:= aArr[2]


聽 // cCiudad := aCiudades[1] 聽 聽 聽 聽 聽<----- Aqui siempre se ubica en el primer registro
聽 // cComuna := aComunas[1,1] 聽 聽 聽 聽 <----- Aqui siempre se ubica en el primer registro

聽 聽cCiudad := 'TAMARUGAL' 聽 聽 聽 聽 聽 聽 聽// <----- Aqui le asigno un valor cualquier, donde quiero que se ubique
聽 聽cComuna := 'COLCHANE' 聽 聽 聽 聽 聽// <----- Aqui le asigno un valor cualquier, donde quiero que se ubique


****** Aqui aplico tu rutina para ubicar la Comuna y lo hace muy bien

nZ1:=0
nZ2:=0
encon:=.F.
FOR i := 1 to len(aComunas)
聽 聽 聽nZona := ascan(aComunas[i],Trim(cComuna))
聽 聽 聽IF nZona > 0
聽 聽 聽 聽 encon := .T.
聽 聽 聽 聽 //MsgInfo("La posicion es " + str(i)+ ","+ str(nZona))
聽 聽 聽 聽 nZ1:=i
聽 聽 聽 聽 nZ2:=nZona
聽 聽 聽ENDIF
NEXT i
IF !encon
聽 聽 MsgInfo("No lo encontro")
ENDIF

// El Proble que nunca se ubica el la comuna seleccionada en el combobox, siempre lo hace en el primer elemento



聽 聽DEFINE DIALOG oDlg FROM 1,1 TO 300, 600 PIXEL TITLE "Seleccione Ciudad y Comuna"

聽 聽@ 20, 10 COMBOBOX cCiudad ITEMS aCiudades SIZE 130,200 PIXEL OF oDlg ;
聽 聽 聽 聽 聽 聽 ON CHANGE ( oComuna:SetItems( aComunas[ AScan( aCiudades, cCiudad ) ] ), oComuna:Set( oComuna:aItems[ 1 ] ) )

聽 聽@ 20,160 COMBOBOX oComuna VAR cComuna ITEMS aComunas[ 1 ] SIZE 130,200 PIXEL OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 // <------- Aqui necedito que se muestre al ingresar la comuna seleccionada
聽 聽
聽 聽@ 100,(300/2)-(100/2) BUTTON "Mostrar seleccionado" SIZE 100, 20 PIXEL OF oDlg ;
聽 聽 聽 聽 聽 聽 ACTION MsgInfo( cCiudad, cComuna )
聽 
聽 聽ACTIVATE DIALOG oDlg CENTERED ON INIT (oComuna:SetItems( aComunas[ nZ1] ), oComuna:Set( nZ2 )) 聽 //<- Creo que te faltaba esto

return nil

Function CrearArrays2()
聽 聽local aArray1 := {}, aArray2 := {}, aItems := {}, nVar, n
聽 聽local aCiudades:={ { 1,'ARICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 2,'PARINACOTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 3,'IQUIQUE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'TAMARUGAL'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'ANTOFAGASTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 49,'SANTIAGO'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 54,'TALAGANTE'} }

聽 聽local aComunas:= { { 1,'ARICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 1,'CAMARONES'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 2,'PUTRE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 2,'GENERAL LAGOS'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 3,'IQUIQUE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 3,'ALTO HOSPICIO'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'POZO ALMONTE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'CAMI脩A'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'COLCHANE'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'HUARA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 4,'PICA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'ANTOFAGASTA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'MEJILLONES'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'SIERRA GORDA'},;
聽 聽 聽 聽 聽 聽 聽 聽 { 5,'TALTAL'} }


// Aqu铆 se generan los nuevos Array para hacer los filtro del combobox


聽 For n := 1 To Len(aCiudades)
聽 聽 聽 aadd(aArray1, aCiudades[n,2])
聽 聽 聽 nVar := aCiudades[n,1]
聽 聽 聽 aItems := {}
聽 聽 聽 AEval( aComunas, {|a| if(a[1] == nVar, aadd(aItems, a[2]),) } )
聽 聽 聽 if( len(aItems) = 0, aadd(aItems,"Sin Valor"), nil )
聽 聽 聽 aadd(aArray2, aItems)
聽 Next

聽 SysRefresh()

Return { aArray1, aArray2 }



Amigo Cesar.

Mil disculpas por haberte molestado.

Como siempre, eres un Maestro, pero en esta publicaci贸n, me encuentro solicitando un tercer combobox anidado.

El c贸digo que me has entregado funciono perfecto, pero es otro requerimiento que te realice en tu correo privado, de poder modificar sobre los combobox ya grabados.

Me alegro mucho que lo hayas publicados para nuestros colegas que lo puedan nececitar.


Infinitas gracias.

Muchos Saludos.

Antonio
FWH 22.10 - HARBOUR - PELLES C
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 03:14 PM

Amigos Buen dia

Alguna idea de como anidar 3 combobox, codigo funcionando Ciudad y Comuna, falta agregar sectores que depende de Comunas??

Saludos

Antonio

FWH 22.10 - HARBOUR - PELLES C
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 04:14 PM

Antonio,

Aplicando la misma l贸gica que usamos en el primer combo para que se rellene el segundo, podrias extenderlo al segundo para que se rellene el tercero.

No lo he probado, pero diria que es el camino a seguir

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 04:41 PM

Buen dia Maestro Antonio.

Muchas gracias por responder.

Es lo que he tratado de hacer, pero no me ha resultado, ya llevo 2 dias y no doy con la solucion, continuare intentando, claro que entre mas intentos mas me nublo.

Muchos saludos

Antonio.

FWH 22.10 - HARBOUR - PELLES C
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 05:49 PM
Aqui tienes una primera versi贸n, cuya l贸gica aun no es correcta, pero te puede servir de arranque :-)

Depende de como quieras organizar las provincias, las ciudades y los barrios. Segun como ordenes los arrays asi habr谩
que cambiar el c贸digo.

Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

聽 聽local oDlg, cProvincia := "Almeria", oCiudades, cCiudad := "Uno"
聽 聽local cBarrio := "aaa", oBarrios
聽 聽local aProvincias := { "Almeria", "Cadiz", "Cordoba", "Granada", "Huelva", "Jaen", "Malaga", "Sevilla" } 
聽 聽local aCiudades := { { "Uno", "Dos", "Tres" }, { "Cuatro", "Cinco", "Seis" }, { "Siete", "Ocho", "Nueve" } }
聽 聽local aBarrios := { { "aaa", "bbb", "ccc" }, { "ddd", "eee", "fff" }, { "ggg", "hhh", "iii" } }

聽 聽DEFINE DIALOG oDlg TITLE "Seleccione provincia, ciudad y barrio" SIZE 500, 200

聽 聽@ 1, 聽3 COMBOBOX cProvincia ITEMS aProvincias ;
聽 聽 聽 ON CHANGE ( oCiudades:SetItems( aCiudades[ AScan( aProvincias, cProvincia ) ] ), oCiudades:Set( oCiudades:aItems[ 1 ] ) )

聽 聽@ 1, 12 COMBOBOX oCiudades VAR cCiudad ITEMS aCiudades[ 1 ] ;
聽 聽 聽 ON CHANGE ( oBarrios:SetItems( GetBarrios( aCiudades, cCiudad, aBarrios ) ), oBarrios:Set( oBarrios:aItems[ 1 ] ) ) 聽

聽 聽@ 1, 21 COMBOBOX oBarrios VAR cBarrio ITEMS aBarrios[ 1 ]

聽 聽@ 3, 10 BUTTON "Mostrar seleccionado" ACTION MsgInfo( cProvincia, cCiudad + "," + cBarrio )

聽 聽ACTIVATE DIALOG oDlg CENTERED

return nil

function GetBarrios( aCiudades, cCiudad, aBarrios )

聽 聽local n, nAt

聽 聽for n = 1 to Len( aCiudades )
聽 聽 聽 if ( nAt := AScan( aCiudades[ n ], cCiudad ) ) != 0 
聽 聽 聽 聽 聽return aBarrios[ nAt ]
聽 聽 聽 endif
聽 聽next
聽 聽
return ""
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 05:59 PM

Imagino que la forma correcta de organizar los datos seria asi:

local aProvincias := { "Almeria", "Cadiz", "Cordoba", "Granada", "Huelva", "Jaen", "Malaga", "Sevilla" }
local aCiudades := { { "Uno", "Dos", "Tres" }, { "Cuatro", "Cinco", "Seis" }, { "Siete", "Ocho", "Nueve" } }
local aBarrios := { { { "aaa", "bbb", "ccc" }, { "ddd", "eee", "fff" }, { "ggg", "hhh", "iii" } },;
{ { "jjj", "kkk", "lll" }, { "mmm", "nnn", "ooo" }, { "ppp"; "qqq", "rrr" } },;
{ { "sss", "ttt", "uuu" }, { "vvv", "www", "xxx" }, { "yyy", "zzz" } } }

luego la ciudad "Uno" tiene los barrios { "aaa", "bbb", "ccc" }
la ciudad "Dos" tiene los barrios { "ddd", "eee", "fff" }
etc...

Segun como quieras organizar los datos, asi tiene que cambiar el c贸digo para encontrar la provincia, ciudad y barrio

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Wed Sep 07, 2022 11:40 PM
Maestro Antonio

Muy amable, muchas gracias por su ayuda.

Estoy intentando encontrar el porque se cae despu茅s de algunas selecciones, es aleatorio, en la primera selecci贸n de ciudad, o en otras de los combobox.

Seguir茅 a ver si logro encontrar el origen.


Muchas gracias

Antonio.

Error:
Code (fw): Select all Collapse
Application
===========
   Path and name: C:\Desa\Clarp Estetica\Clarp.exe (32 bits)
   Size: 7,357,440 bytes
   Compiler version: Harbour 3.2.0dev (r2008190002)
   FiveWin  version: FWH 22.03
   C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
   Windows version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 12 secs 
   Error occurred at: 07/09/2022, 20:37:02
   Error description: Error BASE/1132  Error de rango: acceso al array
   Args:
     [   1] = A   {{"      ","Uno","Dos","Tres"},{"      ","Cuatro","Cinco","Seis"},{"      ","Siete","Ocho","Nueve"}} length: 3
     [   2] = N   5

Stack Calls
===========
   Called from: .\Clarp.PRG => (b)COMBOBOX3( 565 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:CHANGE( 581 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1824 )
   Called from: .\source\classes\COMBOBOX.PRG => TCOMBOBOX:HANDLEEVENT( 923 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3560 )
   Called from:  => SENDMESSAGE( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:COMMAND( 453 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 1140 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 304 )
   Called from: .\Clarp.PRG => COMBOBOX3( 574 )
   Called from: .\Clarp.PRG => (b)MAIN( 111 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 713 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 999 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1845 )
   Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2051 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3560 )
   Called from:  => WINRUN( 0 )
FWH 22.10 - HARBOUR - PELLES C
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Thu Sep 08, 2022 04:57 AM

La raz贸n es simple:

Estas intentando acceder al elemento quinto de un array que tiene solo tres elementos:

 [   1] = A   {{&quot;      &quot;,&quot;Uno&quot;,&quot;Dos&quot;,&quot;Tres&quot;},{&quot;      &quot;,&quot;Cuatro&quot;,&quot;Cinco&quot;,&quot;Seis&quot;},{&quot;      &quot;,&quot;Siete&quot;,&quot;Ocho&quot;,&quot;Nueve&quot;}} length: 3
 [   2] = N   5
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Fri Sep 09, 2022 02:51 AM
Otra forma, enredado pero funcional :-)

Code (fw): Select all Collapse
#include "fivewin.ch"


STATIC lInicia := .T.

Function Inicio()
聽 聽LOCAL oDlg, oCiudades, oComunas, oSectores, aCiudCbx := {}, aComunCbx := {}, aSectCbx := {}
聽 聽LOCAL cCiudad, cComuna, cSector, nPos := 0
聽 聽LOCAL aCiudades := {{"1","Ciudad Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2","Ciudad Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3","Ciudad Tres"} }
聽 聽
聽 聽LOCAL aComunas 聽:= {{"1.1","Comuna Uno Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2","Comuna Dos Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3","Comuna Tres Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1","Comuna Uno Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2","Comuna Dos Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.3","Comuna Tres Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1","Comuna Uno Ciud.Tres"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2","Comuna Dos Ciud.Tres"} }
聽 聽
聽 聽LOCAL aSectores := {{"1.1.1","Sector 1 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.2","Sector 2 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.3","Sector 3 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.4","Sector 4 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.1","Sector 1 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.2","Sector 2 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.3","Sector 3 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.4","Sector 4 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.5","Sector 5 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.1","Sector 1 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.2","Sector 2 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.3","Sector 3 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1.1","Sector 1 Com.2.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1.2","Sector 2 Com.2.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2.1","Sector 1 Com.2.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2.2","Sector 2 Com.2.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.3.1","Sector 1 Com.2.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1.1","Sector 1 Com.3.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1.2","Sector 2 Com.3.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.1","Sector 1 Com.3.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.2","Sector 2 Com.3.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.3","Sector 3 Com.3.2"} }
聽 聽
聽 聽AEVAL(aCiudades,{|aReg| AADD(aCiudCbx,aReg[2])})
聽 聽cCiudad := aCiudCbx[1]
聽 聽
聽 聽aComunCbx := CargaComuna(aCiudades[1,1],aComunas)
聽 聽cComuna := aComunCbx[1]
聽 聽
聽 聽aSectCbx := CargaSector(aComunas[1,1],aSectores)
聽 聽cSector := aSectCbx[1]
聽 聽
聽 聽DEFINE DIALOG oDlg SIZE 600,300 TITLE "Nested Combobox" TRUEPIXEL
聽 聽
聽 聽 聽 聽 @ 10, 10 COMBOBOX oCiudades VAR cCiudad ITEMS aCiudCbx 聽OF oDlg PIXEL SIZE 150,10
聽 聽 聽 聽 聽 聽oCiudades:bChange := {|| nPos := ASCAN(aCiudades,{|x|x[2]=cCiudad } ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaComuna(aCiudades[nPos,1], aComunas, oComunas, @cComuna) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaSector(aComunas[nPos,1], aSectores, oSectores, @cSector)}
聽 聽
聽 聽 聽 聽 @ 10,190 COMBOBOX oComunas 聽VAR cComuna ITEMS aComunCbx OF oDlg PIXEL SIZE 150,10
聽 聽 聽 聽 聽 聽oComunas:bChange 聽:= {|| nPos := ASCAN(aComunas,{|x|x[2]=cComuna } ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaSector(aComunas[nPos,1], aSectores, oSectores, @cSector) }
聽 聽
聽 聽 聽 聽 @ 10,370 COMBOBOX oSectores VAR cSector ITEMS aSectCbx 聽OF oDlg PIXEL SIZE 150,10
聽 聽
聽 聽ACTIVATE DIALOG oDlg CENTERED // ON PAINT (oCiudades:Open(),oComunas:Open(),oSectores:Open())
聽 聽
Return(NIL)
//---------------------------------------------------------------//

Function CargaComuna(cCiudad, aComunas, oComunas, cComuna)
聽 聽LOCAL aResp := {}, cResp
聽 聽FOR EACH cResp IN aComunas
聽 聽 聽 聽if SubStr(cResp[1],1,1) == cCiudad
聽 聽 聽 聽 聽 AADD(aResp,cResp[2])
聽 聽 聽 聽endif
聽 聽next
聽 聽IF !lInicia
聽 聽 聽 oComunas:SetItems(aResp,.F.)
聽 聽 聽 cComuna := aResp[1]
聽 聽 聽 oComunas:Refresh()
聽 聽endif
Return(aResp)
//---------------------------------------------------------------//

Function CargaSector(cComuna, aSectores, oSectores, cSector)
聽 聽LOCAL aResp := {}, cResp
聽 聽FOR EACH cResp IN aSectores
聽 聽 聽 聽if SubStr(cResp[1],1,3) == cComuna
聽 聽 聽 聽 聽 AADD(aResp,cResp[2])
聽 聽 聽 聽endif
聽 聽next
聽 聽IF !lInicia
聽 聽 聽 oSectores:SetItems(aResp,.F.)
聽 聽 聽 cSector := aResp[1]
聽 聽 聽 oSectores:Refresh()
聽 聽endif
聽 聽lInicia := .F.
Return(aResp)
//---------------------------------------------------------------//

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Fri Sep 09, 2022 03:20 AM
Cgallegoa wrote:Otra forma, enredado pero funcional :-)

Code (fw): Select all Collapse
#include "fivewin.ch"


STATIC lInicia := .T.

Function Inicio()
聽 聽LOCAL oDlg, oCiudades, oComunas, oSectores, aCiudCbx := {}, aComunCbx := {}, aSectCbx := {}
聽 聽LOCAL cCiudad, cComuna, cSector, nPos := 0
聽 聽LOCAL aCiudades := {{"1","Ciudad Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2","Ciudad Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3","Ciudad Tres"} }
聽 聽
聽 聽LOCAL aComunas 聽:= {{"1.1","Comuna Uno Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2","Comuna Dos Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3","Comuna Tres Ciud.Uno"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1","Comuna Uno Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2","Comuna Dos Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.3","Comuna Tres Ciud.Dos"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1","Comuna Uno Ciud.Tres"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2","Comuna Dos Ciud.Tres"} }
聽 聽
聽 聽LOCAL aSectores := {{"1.1.1","Sector 1 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.2","Sector 2 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.3","Sector 3 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.1.4","Sector 4 Com.1.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.1","Sector 1 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.2","Sector 2 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.3","Sector 3 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.4","Sector 4 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.2.5","Sector 5 Com.1.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.1","Sector 1 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.2","Sector 2 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"1.3.3","Sector 3 Com.1.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1.1","Sector 1 Com.2.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.1.2","Sector 2 Com.2.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2.1","Sector 1 Com.2.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.2.2","Sector 2 Com.2.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"2.3.1","Sector 1 Com.2.3"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1.1","Sector 1 Com.3.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.1.2","Sector 2 Com.3.1"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.1","Sector 1 Com.3.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.2","Sector 2 Com.3.2"},;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"3.2.3","Sector 3 Com.3.2"} }
聽 聽
聽 聽AEVAL(aCiudades,{|aReg| AADD(aCiudCbx,aReg[2])})
聽 聽cCiudad := aCiudCbx[1]
聽 聽
聽 聽aComunCbx := CargaComuna(aCiudades[1,1],aComunas)
聽 聽cComuna := aComunCbx[1]
聽 聽
聽 聽aSectCbx := CargaSector(aComunas[1,1],aSectores)
聽 聽cSector := aSectCbx[1]
聽 聽
聽 聽DEFINE DIALOG oDlg SIZE 600,300 TITLE "Nested Combobox" TRUEPIXEL
聽 聽
聽 聽 聽 聽 @ 10, 10 COMBOBOX oCiudades VAR cCiudad ITEMS aCiudCbx 聽OF oDlg PIXEL SIZE 150,10
聽 聽 聽 聽 聽 聽oCiudades:bChange := {|| nPos := ASCAN(aCiudades,{|x|x[2]=cCiudad } ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaComuna(aCiudades[nPos,1], aComunas, oComunas, @cComuna) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaSector(aComunas[nPos,1], aSectores, oSectores, @cSector)}
聽 聽
聽 聽 聽 聽 @ 10,190 COMBOBOX oComunas 聽VAR cComuna ITEMS aComunCbx OF oDlg PIXEL SIZE 150,10
聽 聽 聽 聽 聽 聽oComunas:bChange 聽:= {|| nPos := ASCAN(aComunas,{|x|x[2]=cComuna } ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CargaSector(aComunas[nPos,1], aSectores, oSectores, @cSector) }
聽 聽
聽 聽 聽 聽 @ 10,370 COMBOBOX oSectores VAR cSector ITEMS aSectCbx 聽OF oDlg PIXEL SIZE 150,10
聽 聽
聽 聽ACTIVATE DIALOG oDlg CENTERED // ON PAINT (oCiudades:Open(),oComunas:Open(),oSectores:Open())
聽 聽
Return(NIL)
//---------------------------------------------------------------//

Function CargaComuna(cCiudad, aComunas, oComunas, cComuna)
聽 聽LOCAL aResp := {}, cResp
聽 聽FOR EACH cResp IN aComunas
聽 聽 聽 聽if SubStr(cResp[1],1,1) == cCiudad
聽 聽 聽 聽 聽 AADD(aResp,cResp[2])
聽 聽 聽 聽endif
聽 聽next
聽 聽IF !lInicia
聽 聽 聽 oComunas:SetItems(aResp,.F.)
聽 聽 聽 cComuna := aResp[1]
聽 聽 聽 oComunas:Refresh()
聽 聽endif
Return(aResp)
//---------------------------------------------------------------//

Function CargaSector(cComuna, aSectores, oSectores, cSector)
聽 聽LOCAL aResp := {}, cResp
聽 聽FOR EACH cResp IN aSectores
聽 聽 聽 聽if SubStr(cResp[1],1,3) == cComuna
聽 聽 聽 聽 聽 AADD(aResp,cResp[2])
聽 聽 聽 聽endif
聽 聽next
聽 聽IF !lInicia
聽 聽 聽 oSectores:SetItems(aResp,.F.)
聽 聽 聽 cSector := aResp[1]
聽 聽 聽 oSectores:Refresh()
聽 聽endif
聽 聽lInicia := .F.
Return(aResp)
//---------------------------------------------------------------//


Hola Carlos.

Muy amable, muchas gracias por tu ayuda y buena voluntad.

Disculpa no haber respondido antes, lamentablemente mi sector estuvo sin energ铆a el茅ctrica y sin poder encender equipos.

Prov茅 tu c贸digo, pero a mi me muestra solo el 1er elemento de cada combobox, no muestra ning煤n elemento mas.

Muchas gracias por gesti贸n.

Saludos

Antonio
FWH 22.10 - HARBOUR - PELLES C
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Ayuda 3 Combobox Anidados * URGENTE ??
Posted: Fri Sep 09, 2022 03:24 AM
Antonio Linares wrote:La raz贸n es simple:

Estas intentando acceder al elemento quinto de un array que tiene solo tres elementos:

[ 1] = A {{" ","Uno","Dos","Tres"},{" ","Cuatro","Cinco","Seis"},{" ","Siete","Ocho","Nueve"}} length: 3
[ 2] = N 5



Buenas noches Maestro Antonio.

Recien pudiendo encender equipos.

Muchas gracias por su indicaci贸n, si me hab铆a dado cuenta del motivo del error antes del corte de energ铆a, pero malamente pens茅 en seguir viendo hoy la forma de solucionarlo, y no se pudieron encender equipos.

Muchos Saludos y muy agradecido.

Antonio
FWH 22.10 - HARBOUR - PELLES C

Continue the discussion