Autore Topic: combobox  (Letto 3489 volte)

g.paolo

  • Visitatore
combobox
« il: 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"

g.paolo

  • Visitatore
Re: combobox
« Risposta #1 il: 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?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #2 il: 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...)

g.paolo

  • Visitatore
Re: combobox
« Risposta #3 il: 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.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #4 il: 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

g.paolo

  • Visitatore
Re: combobox
« Risposta #5 il: 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!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #6 il: 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.

g.paolo

  • Visitatore
Re: combobox
« Risposta #7 il: 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!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #8 il: 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

g.paolo

  • Visitatore
Re: combobox
« Risposta #9 il: 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!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #10 il: 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.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #11 il: 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.

g.paolo

  • Visitatore
Re: combobox
« Risposta #12 il: 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.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: combobox
« Risposta #13 il: 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

g.paolo

  • Visitatore
Re: combobox
« Risposta #14 il: 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.