Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: g.paolo - 11 Marzo 2008, 09:43:41

Titolo: combobox
Inserito da: g.paolo - 11 Marzo 2008, 09:43:41
Ricordate come si fa a posizionarsi su un determinato elemento della combo avendo a disposizione il numero dell'elemento?
Ho provato con "current" e con "id" ma forse la sintassi usata non è corretta e mi ritorna l'errore: not a function" o "not a object"
Titolo: Re: combobox
Inserito da: g.paolo - 11 Marzo 2008, 10:06:36
Dopo prove e riprove ho finalmente trovato la soluzione:
 
Codice: [Seleziona]
combobox1.Text = combobox1[contatore].Text  

dove contatore è la variabile che contiene il numero riga contenente il testo cercato.
Ho notato comunque che quando vado a cliccare nella combo, non mi trovo la lista posizionata sul testo che ho puntato, ma parte dal fondo.
Questo puo essere molto scomodo se desidero ritornare alla posizione sulla quale ho puntato.
Avete idee su come si fa?
Titolo: Re: combobox
Inserito da: md9327 - 11 Marzo 2008, 14:00:57
Con quella istruzione non hai fatto altro che impostare il testo nel campo di edit della combo; la cosa non ti ha dato problemi perchè il testo corrisponde comunque ad una delle voci in elenco.
Per capire dove è posizionato il cursore nella combo, basta leggere la variabile .Index; stessa cosa per impostare il cursore nella stessa combo; .Index = 10 (è un esempio...)
Titolo: Re: combobox
Inserito da: g.paolo - 11 Marzo 2008, 15:01:53
Ho provato a fare come hai detto
Codice: [Seleziona]
.Index = 10
.setfocus
.select

ma quando apro il menù pull-down mi ritrovo comunque sull'ultima riga anzichè su quella attiva nella combo.
Se volessi scegliere la riga prima o dopo quella attiva, dovrei scorrere tutta la lista verso l'alto
fino ad arrivare a quella attiva. Questo è il problema.
Titolo: Re: combobox
Inserito da: md9327 - 11 Marzo 2008, 21:29:22
Credo che pasti solo l'Index...

Nel caso dell'uso con .Text, stai attento perchè devi impostare l'esatta stringa (attenzione agli spazi, specialmente in testa e in coda).

Prova in questo altro modo:

.Text = [].Text

ops, scusa, l'hai già provato... solo che a me funziona bene, e aprendo la combo mi si posiziona sulla stringa esatta... non è che per caso il tuo contatore è impostato in modo errato ? prova con il debug
Titolo: Re: combobox
Inserito da: g.paolo - 11 Marzo 2008, 21:43:24
Ti confermo che il posizionamento del testo nella combo è perfetto. Il problema si manifesta quando apro il menu pull-down, e solo allora mi ritrovo in fondo alla lista anche se il testo nella combo rimane invariato ovviamente.
Quindi se devo cambiare qualcosa che è posizionato vicino al testo originale, lo devo andare a cercare, perchè non mi ritrovo col puntamento corretto nella lista, sul testo originale!
Titolo: Re: combobox
Inserito da: md9327 - 12 Marzo 2008, 11:21:01
Ho capito, solo che mi pare strano... devo verificare se per caso non è stato cambiato qualcosa nelle ultime versioni.
Titolo: Re: combobox
Inserito da: g.paolo - 12 Marzo 2008, 12:20:29
Ti confermo che ho riprovato in entrambi i modi:

.Index = contatore
.Text = [].Text

ed il risultato non cambia.
Forse la tua versione di gambas è piu recente della mia, e qualcosa è cambiato!
Titolo: Re: combobox
Inserito da: md9327 - 12 Marzo 2008, 15:16:26
Ovviamente ci credo, non discuto questo...

Stasera provo a vedere se riesco a capirci qualcosa, per ora sono al lavoro e non ho modo di fare alcunchè...

Ciao
Titolo: Re: combobox
Inserito da: g.paolo - 12 Marzo 2008, 18:51:51
Grazie per la tua disponibilità. In questo nuovo mondo di gambas, se non ci fosse questo forum e persone come te, sarebbe molto difficile arrivare a combinare qualcosa di buono, sopratutto per gente come me che l'inglese lo mastica molto male.
Mi è di molto aiuto il google - language_tools per tradurre le cose ostiche, ma anche questo non sempre funziona come dovrebbe.
Se lo staff di Gambas avesse almeno arricchito la sua guida on line con semplici esempi per i comandi, le cose sarebbero molto più facili. Invece è molto ma molto scarna ed il più delle volte ti ritrovi con una semplice riga di spiegazione che lascia molto a desiderare!
Vedi ad esempio la guida per la combobox.raise:

SUB Raise ( )
Sends the control to the foreground of its parent, che tradotto mi da:
"Invia il controllo al primo piano della casa madre."  Chi ci capisce è bravo!
Titolo: Re: combobox
Inserito da: md9327 - 12 Marzo 2008, 20:35:26
:good:  :good:

carina questa!!!

Sì, concordo, ma purtroppo in informatica tocca sempre inventarsi qualcosa.
Riguardo la documentazione, sia di Gambas che di altra applicazione, se vogliamo è ed è sempre stata la parte più ostica e più rompib...
Non prendertela con il team di Gambas, hanno fatto grandi passi e sono arrivati a distribuire un prodotto funzionante e utile; purtroppo la documentazione, riferita all'utente finale, è sempre l'ultima parte del tutto. Se hai seguito un pò l'evoluzione di questi anni, da quando è nato gambas, hanno tentato molte volte di aggiornarla ma, senza riuscire a stare al passo con lo sviluppo.

Bè, non voglio dilungarmi oltre, quello che volevo dire è che anche un aiuto da parte nostra potrebbe essere utile, ovviamente nei limiti delle rispettive esperienze; già in questo sito puoi trovare aiuto, come hai giustamente scritto, per cui andiamo avanti così.

Divulgare, divulgare il più possibile !!!

Bye

P.S.: per la combo ti faccio sapere al più presto.
Titolo: Re: combobox
Inserito da: md9327 - 12 Marzo 2008, 20:45:34
Ho provato subito la cosa e ti confermo che l'istruzione esatta è quella che ti avevo inviato ultimamente, e che anche tu avevi trovato.

Selezionato una delle stringhe in elenco, aprendo la combo, questa si posiziona correttamente sulla relativa stringa.
Il dubbio che mi è venuto, anzi i dubbi sono:
1) la combo è in sola lettura o è editabile ?
2) ha per caso la proprietà "Sorted" impostata a TRUE ?

Fammi sapere quali sono le proprietà che hai modificato rispetto ai valori di default, così vediamo le differenze e cerchiamo di capire da cosa dipende il comportamento della tua combo.
Titolo: Re: combobox
Inserito da: g.paolo - 12 Marzo 2008, 21:27:30
A parte le proprietà grafiche relative al testo ed ai colori, non ho cambiato nulla delle altre!
E ti confermo che non funziona come richiesto. Comunque spiego cosa ho fatto.
All'apertura del form carico nella combo la lista delle voci tramite un vettore (result) che punta ad una table che è aperta con un indice proprio (select * from table order by campo)
Poi cerco il testo che mi serve nella combo e memorizzo la sua posizione.
Poi punto alla posizione trovata usando i metodi che abbiamo considerato assegnando il valore alla proprietà TEXT della combo.
Quando clicco sulla combo, si apre il menù verso l'alto e mi trovo posizionato sull'ultima voce.
Titolo: Re: combobox
Inserito da: andy60 - 13 Marzo 2008, 01:19:18
Il problema del combo è che l'index da' il riferimento alla posizione del valore selezionato, ma non dice nulla riguardo un eventuale id del valore selezionato. Mi spiego meglio: immaginiamo di avere una tabella di nomi di attività sportive costruita da un id (campo seriale autoincrement) e da un campo testo...come si fa a recuperare l'id del valore testo selezionato, che appare nel combo (il valore SportCorrente)? Io uso questa routine:

Codice: [Seleziona]

'ArraySports è un recordset della tabella

PUBLIC SUB cboSPORTS_Click()
  ArraySports.MoveFirst
  ArraySports.MoveTo(cboSPORTS.Index)
  SportCorrente = ArraySports!id
END
Titolo: Re: combobox
Inserito da: g.paolo - 13 Marzo 2008, 09:33:46
@andy60
Grazie per il tuo intervento!
Un bel casino però! Rifacendomi al tuo esempio, se io uso ArraySports per riempire la combo "SPORTS" all'apertura della maschera che chiamiamo "GARE" e poi devo chiudere e riaprire la connessione per caricare il result di "GARE" che riempie la maschera con i campi per l'edit della gara selezionata, come faccio ad avere ancora a disposizione ArraySports quando la connessione è stata chiusa?

PUBLIC SUB cboSPORTS_Click()
  ArraySports.MoveFirst
  ArraySports.MoveTo(cboSPORTS.Index)
  SportCorrente = ArraySports!id
END

Ovviamente c'è qualcosa che mi sfugge nel meccanismo usato per la connessione, perchè quando ho provato ad estrarre due result diversi con la medesima connessione ho fatto un bel fiasco!
Il mio obiettivo dunque sarebbe solo quello di poter scegliere dalla combo lo sport richiesto per combinarlo col record della gara che sto editando. Lo scopo è solo quello di inserire un valore preciso dalla combo per non permettere la possibilità di  errori mediante un inserimento manuale.
Titolo: Re: combobox
Inserito da: andy60 - 13 Marzo 2008, 10:23:10
per avere un recordset (result) sempre disponibile devi dichiarlo all'inizio della form come public..puoi avere + result ed utilizzarli nei controlli
Titolo: Re: combobox
Inserito da: g.paolo - 13 Marzo 2008, 10:30:53
Nel form dove uso il result io l'ho sempre dichiarato PRIVATE perchè non mi serve al di fuori della classe del form. Quindi questo è sbagliato a quanto vedo! Ma allora anche l'oggetto CONNECTION va dichiarato  PUBLIC all'interno del medesimo form?
Titolo: Re: combobox
Inserito da: leo72 - 13 Marzo 2008, 12:36:00
Scusate l'intromissione.
Io in una mia applicazione uso il ComboBox e indicizzo gli elementi con la proprietà Index.
Ma se clicco sulla freccia per aprire il menu a tendina, l'elemento mi resta selezionato, come potete vedere dallo screenshot allegato.
Preciso che il widget è impostato in sola lettura e che uso Gambas 2.3 SVN ma lo stesso risultato ce l'avevo anche con le precedenti versioni di Gambas.
Titolo: Re: combobox
Inserito da: g.paolo - 13 Marzo 2008, 12:47:36
Buona notizia mi dai leo72, quindi è solo un problema di saperlo usare!
Vedrò di lavorarci ancora, chissà che non riesca.
Titolo: Re: combobox
Inserito da: giulio - 13 Marzo 2008, 14:08:02
Citazione

leo72 ha scritto:
Scusate l'intromissione.
Io in una mia applicazione uso il ComboBox e indicizzo gli elementi con la proprietà Index.
Ma se clicco sulla freccia per aprire il menu a tendina, l'elemento mi resta selezionato, come potete vedere dallo screenshot allegato.
Preciso che il widget è impostato in sola lettura e che uso Gambas 2.3 SVN ma lo stesso risultato ce l'avevo anche con le precedenti versioni di Gambas.


Pure a me, Gambas 2.0, ComboBox funziona così come ha mostrato leo72. Ciao.
Titolo: Re: combobox
Inserito da: g.paolo - 13 Marzo 2008, 14:40:27
Ho trovato finalmente l'inghippo! Tutto era legato alla proprietà "readonly" che mi ero scordato di impostare su "true".
Ora quando clicco sulla combo mi ritrovo la lista ordinata con evidenziata la voce a cui ho puntato.
Titolo: Re: combobox
Inserito da: md9327 - 13 Marzo 2008, 15:32:07
Quindi il dubbio che mi era venuto è quello giusto.
In effetti con la proprietà readonly=false, la combo permette di inserite manualmente tutta o parte della stringa con cui viene effettuata la ricerca nell'elenco; questo può servire anche per popolare la combo. COn readonly=true, la combo diventa come ula listbox, per cui segue la logica di puntamento nell'elenco interno.

Risolto il problema, mettiamo in archivio... :-)

Ciao
Titolo: Re: combobox
Inserito da: g.paolo - 13 Marzo 2008, 20:27:12
Un grande grazie a tutti voi per la pazienza mostratami. Obbligato!