Autore Topic: Una spiegazione sui ComboBox  (Letto 1896 volte)

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Una spiegazione sui ComboBox
« il: 16 Giugno 2008, 09:42:07 »
Ciao a tutti :-)

Nel progetto che sto realizzando per imparare Gambas, ho inserito una combobox per contenere un elenco dei progetti assegnabili per un determinato intervento. Sto facendo molta confusione e vorrei che qualcuno mi desse una delucidazione per vedere non tanto SE ho capito ma COSA ho capito :-)

I progetti hanno come codice una chiave numerica intera, e ho pensato che fosse cosa buona e giusta usare questo codice quando faccio la mia aggiunta alla ComboBox, usando una sintassi come la seguente:

Codice: [Seleziona]

  sql = "Select * from Progetti order by Descrizione"
  hData = db.Exec(sql)

    cbProgetti.Clear()
    FOR EACH hData
      cbProgetti.Add(hData!Descrizione, hData!Progetto)
    NEXT


Dove "Progetto" è il codice del progetto e "Descrizione" è la descrizione (ma va?! :-))

Va tutto bene, mi si carica la Combo, ma quando vado a usarla non fa quello che mi aspetto. Innanzi tutto, quando recupero i dati di un intervento esistente, metto il codice del progetto nel Combo, modificando il valore .Index, e già qui ho qualche dubbio. Quando sposto il record selezionato sposto il valore .Index nel campo del file.
Ma non sempre ho una corrispondenza esatta, e questo non capisco se dipenda dal fatto che l'index in realtà NON è la key ma un valore tipo un indice di array, e quindi che devo aggiungere/sottrarre una unità per avere il valore esatto, oppure se devo settare altre proprietà.
Inoltre, quando emetto il pannello con l'index settato in modo corretto (?), mi aspettavo di avere selezionato la riga che mi interessa, ma questo non capita.

Come avete potuto vedere, ho le idee parecchio confuse, ma questo temo sia normale per chi, come me, arriva da ambienti di programmazione completamente diversi (se volete qualche spiegazione sui SubFile sono a disposizione :-) ).

Ho provato a capire qualcosa con la documentazione e con il forum, ma sinceramente non ho capito granché... tra l'altro, anche il Wiki mi è sembrato piuttosto scarno (per ora). Se riesco a capire come funzionano i Combo, mi impegno a modificare il Wiki in modo che diventi CHIARISSIMO! :-D

Grazie a tutti
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Una spiegazione sui ComboBox
« Risposta #1 il: 16 Giugno 2008, 10:00:19 »
Accidenti, come capita spesso ho cominciato a capire qualcosina: innanzi tutto l'index si comporta proprio come l'indice di un array, quindi l'index della prima riga, ha valore ZERO e non UNO, e già questo mi incasinava che merita...
Però per capirlo ho dovuto usare una ListBox... la cui differenza dalla ComboBox mi sfugge...
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Una spiegazione sui ComboBox
« Risposta #2 il: 16 Giugno 2008, 20:36:58 »
Tutti gli oggetti, che si basano su array (vedi combo e list), partono da ZERO.
Inoltre devi stare attendo all'ordinamento delle combo, che scombinano l'elenco. Se vuoi un ordine controllato, lo devi fare prima di inserire i dati nella combo.
Tieni conto che la combo ha una proprietà List, a cui puoi assegnare direttamente un array di stringhe:

DIM arr AS NEW String[10]
arr[0] = "a"
...
arr[9] = "z"
combo.List = arr

Bye.

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Una spiegazione sui ComboBox
« Risposta #3 il: 16 Giugno 2008, 20:49:29 »
Be' quindi la gestione di una combo utilizzando un codice è relativamente problematica se ho bisogno di farlo in ordine alfabetico.
In pratica dovrei popolare la combo in ordine alfabetico, e quando mi viene selezionato un record, ddevo recuperare il suo codice in base al testo selezionato, giusto?
Ho visto che ci sono altri contenitori che prevedono una proprietà key, che, immagino, permette di mettere un codice che si può recuperare in fase di lettura del selezionato.
Saluti a tutti

Mario

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Una spiegazione sui ComboBox
« Risposta #4 il: 17 Giugno 2008, 16:32:03 »
Beh, dipende anche come hai strutturato il tuo codice e da cosa devi fare.
Ad esempio, se popoli la Combo caricando dei dati da un array o da un file, è facile poi confrontare l'elemento selezionato (usando ad esempio la proprietà Text) per trovare cosa ha scelto il tuo utente.
Per ora non ho trovato particolari problemi nell'uso dei Combo.

Insomma, questo per dirti che ogni IDE ha i suoi pro e contro. La Combo in Gambas è strutturata così, con cose magari positive ed altre negative. Sta al programmatore, sfruttare i pro e gestire i contro...  :-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Una spiegazione sui ComboBox
« Risposta #5 il: 17 Giugno 2008, 16:39:01 »
Uhm, quindi si può fare così: carico un array con i dati che mi interessano, poi con questa array popolo la ComboBox.
Quando viene eseguita una scelta controllo quale elemento dell'array è uguale a quello che è stato scelto, e quindi ho la sua chiave.
Domanda scema: non sarebbe più logico implementare la chiave sulla Combo? Non mi sembra che avrebbe scarsa utilità...
Saluti a tutti

Mario

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Una spiegazione sui ComboBox
« Risposta #6 il: 18 Giugno 2008, 15:40:54 »
I widget di Gambas si appoggiano ai widget Qt per cui ereditano da essi tutte le proprietà ed i metodi. Non sono un programmatore C/C++ e non conosco le librerie Qt per cui non so dirti se la key nel Combobox è presente oppure no nell'omonimo widget Qt e, se no, perché non è stato implementato.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Una spiegazione sui ComboBox
« Risposta #7 il: 18 Giugno 2008, 16:33:43 »
Magari faccio qualche prova :-)
Saluti a tutti

Mario