Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: doublemm - 31 Luglio 2010, 23:41:32

Titolo: filtrare combobox
Inserito da: doublemm - 31 Luglio 2010, 23:41:32
vorrei usare, come si fa di solito, la combobox filtrando le item in base a quello che scrivo su combobox.text. Sapete dirmi se c'è un esempio da scaricare ?
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 11:40:38
non so se sono sulla strada giusta: Ho eseguito una procedura lostfocus dove ricreo l'elenco delle item aggiungendo alla query un WHERE descrizione LIKE %text%
e poi un combo.popup

funziona tutto ma non riesco a riposizionare il cursore sul ext della combo per continuare a scrivere altri caratteri e restringere la ricerca. Funziona solo se con il mouse mi riposiziono sulla combo.
Titolo: Re: filtrare combobox
Inserito da: Ceskho - 01 Agosto 2010, 12:27:52
§Hai provato ad eseguire tuttoil processo nella sub Change di Combobox?
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 13:37:04
non funziona perchè se digito una lettera sull'area di testo della combo non scateno l'evento combo change quindi non mi filtra le item.

il funzionamento è così:

digito un carattere sull'area text di combobox per esempio A

Codice: gambas [Seleziona]

PUBLIC SUB ComboDescrizione_KeyRelease()

  MakeComboDescrizione()
 
  ComboDescrizione.Popup    ' qui mi apre la lista correttamente filtrata in base ai caratteri scritti sulla text di combobox
  ComboDescrizione.SetFocus ' qui vorrei posizionarmi sulla text di combobox per aggiungere un altro carattere a quello già scritto ma non succede

END


Codice: gambas [Seleziona]

PUBLIC SUB MakeComboDescrizione()
DIM variabile AS String
 
  OpenDB()
 
  ComboDescrizione.Clear
 
  variabile = "%" & ComboDescrizione.Text & "%"
   
  sql = "SELECT*FROM DESCRIZIONE WHERE descrizione LIKE '" & variabile & "'"
  hres = $hConn.Exec(sql)
 
  FOR EACH hres
    IF hres.Available = TRUE THEN
      ComboDescrizione.Add(hres!descrizione)
    ENDIF
  NEXT
 
  ComboDescrizione.Sorted = TRUE
 
  $hConn.Close
 
END

Titolo: Re: filtrare combobox
Inserito da: Berserker79 - 01 Agosto 2010, 15:48:04
Ma perchè hai deciso di utilizzare una combobox per digitare il testo da usare come filtro?
Credo sia più opportuno usare una textbox ed effettuare la ricerca con l'evento change.
Io solitamente uso le combobox per proporre dei valori e permettere all'utente di scegliere quello desiderato.
Che sò, avrebbe senso se al caricamento del form, la combobox venisse popolata dagli item del db e quindi tu selezionassi quello desiderato per filtrare il risultato.
Il mio vuole essere un consiglio in base alle informazioni che hai dato, magari per il tuo progetto la combobox è la scelta migliore.
Ciao.
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 16:39:05
infatti la combobox viene popolata all'apertura del form. Come succede su altri programmi io volevo ridurre le proposte della combobox in base a cosa viene scritto al suo interno. Ti faccio un esempio

combobox:
FORNITORI
GESTIONE
SPESE FISSE
ETC ETC

siccome le voci sono tante e potrebbero crescere utilizzando il prog volevo fare in modo che se nella combo scrivo F l'elenco della combo mi mostri solo le voci che contengono F questo perchè voglio fare in modo che l'utente non scriva cose del tipo una volta FORNIORI e un altra FORNITORE però che la scelta si possa filtrare come dicevo prima.

dal codice che ho postato il filtro funziona ma dopo aver inserito la prima lettera sulla combo apro la tendina vedo la lista filtrata ma se voglio inserire un altra lettera (per esempio ho inserito F ma voglio filtrare ulteriormente aggiungendo una O quindi FO) mi devo posizionare sulla combo con il mouse. Se si potesse automatizzare sarebbe molto più veloce. Altrimenti userò una textbox associata a una listview. Ti ringrazio della tua opinione.
Titolo: Re: filtrare combobox
Inserito da: Golia - 01 Agosto 2010, 18:06:34
Ciao, vedi se puoi adattare questo mio codice, magari domani se ho più tempo vedo di fare meglio :D
Codice: gambas [Seleziona]

PUBLIC SUB tbfornit1_Change()

DIM sql AS String
DIM p AS Integer
DIM myfiltro AS String
 
p = tbfornit1.Pos
 IF p > 0 THEN
  myfiltro = Left$(tbfornit1.Text, p)
  sql = "select * from fornitori WHERE "
  sql = sql & "fornitore  LIKE '" & myfiltro & "%' "
  sql = sql & "order by fornitore"             
  MyRS = MODMain.$conn.Exec(sql)                   
      IF MyRS.Available = TRUE THEN
        MyRS.movefirst
        tbfornit1.Text = myfiltro & Right$(MyRS!fornitore, (Len(MyRS!fornitore) - p))
        tbfornit1.Pos = p
        tbidfornitore.Text = MyRS!idfornitore
        ELSE
        tbfornit1.Pos = p
        tbfornit1.Text = dettagli.deffornitore
        tbidfornitore.Text = dettagli.defidfornitore
      ENDIF
  ENDIF

END


Fammi sapere
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 18:18:03
non vedo combo.popup. Se non sbaglio il tuo codice non apre e mostra le item della combo. Il mio codice funziona se non faccio aprire la combo, se scrivo FO e poi apro la combo trovo le item che contengono FO. Il problema e se uso popup per vedere le item filtrate, se non la chiudo manualmente non riesco a inserire niente nella text della combo
Titolo: Re: filtrare combobox
Inserito da: Golia - 01 Agosto 2010, 18:21:37
Scusa, forse ho letto troppo in fretta.
Il mio codice non prevede combobox, ma una semplice textbox.
Filtra mam mano che scrivi e ti restitusce il nome che trova
Es.
a -> abramo
al -> aldo
 e via dicendo
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 18:23:33
in sostanza io vorrei, una volta aperta la comco con combo.popup tornare a scrivere nella combo.text senza doverlo fare con il mouse ma solo digitando una nuova letera da tastiera
Titolo: Re: filtrare combobox
Inserito da: Berserker79 - 01 Agosto 2010, 19:29:51
Mi sa che la cosa è impossibile.
Infatti quando richiami l'evento popup, devi agire obbligatoriamente sulla tendina aperta e non ti è possibile fare altro, ma questo proprio a livello di sistema operativo.

Titolo: Re: filtrare combobox
Inserito da: Picavbg - 01 Agosto 2010, 23:28:28
@ doublemm:
Combinare le due funzionalità di digitazione e visualizzazione dei dati filtrati nella combobox é impossibile; potresti utilizzare una TextBox per la digitazione della parola e, sfruttando l'evento change di quest'ultima, riempire una listbox posizionandola magari sotto la textbox.
per cui:
Scrivo "F" nella TextBox
                                     --> in TextBox_Change :   filtro i dati dal DB caricando la ListBox di tutte le parole che iniziano con "F"
Ora posso cliccare sulla parola se esiste e in
                                     --> ListBox.Click:   trasferisco la parola selezionata in TextBox.Text
oppure, posso aggiungere una 2^ lettera nella TextBox, per Es. "O"
                                     --> in TextBox_Change :   filtro i dati dal DB caricando la ListBox di tutte le parole che iniziano con "FO"
il ciclo continua fino a quando trovo la parola cercata o fino al completamento della nuova parola nella TextBox.
Ovviamente, a fine digitazione, avrai già pensato ad aggiuingere la nuova parola nel DB.

Se l'idea ti sembra buona, puoi provare. :D
Ciao.
Titolo: Re: filtrare combobox
Inserito da: doublemm - 01 Agosto 2010, 23:44:50
si infatti ho fatto così. Mi è sorto un problema però. La sequenza è questa:

inserisco un testo sulla textbox
l'evento keyrelase mi provoca l'aggiornamento della listbox in base al testo digitato.
listbox_clic analizza l'item di listbox cambi i dei valori su dei radiobox e fare click utton
ora dovrei inserire un importo su una valuebox per poi salvare il tutto su di un db

Ho provato a mettere sull'evento listbox_click alla fine del codice valuebox.setfocus ma il focus non cambia. devo posizionarmi sulla valuebox e fare click col mouse e non solo ma quando digito nella textbox un valore da cercare, mi compare nella listbox ma se mi sposto col tab listbox non prende mai il focus.
Titolo: Re: filtrare combobox
Inserito da: Picavbg - 02 Agosto 2010, 00:10:25
Attenzione agli eventi Focus. Vedi mia sofferta vicissitudine corrente http://www.gambas-it.org/smf/index.php?topic=1226.0 (http://www.gambas-it.org/smf/index.php?topic=1226.0).

Comunque l'evento Keyrelease dovrebbe manifestarsi prima ancora dell'evento change; però non sono sicuro, non l'ho mai testato. Se é come penso la TextBox.Text non dovrebbe, in quel momento contenere il carattaere ultimo digitato.

Prova poi a mettere delle istruzione print del tipo
Print "Passaggio in Text_GotFocus"
Print "Passaggio in Listox_GotFocus"
Print "Passaggio in valueBox_GotFocus"
per capire come si comporta il programma.

Buon lavoro e buono studio.  :)
Titolo: Re: filtrare combobox
Inserito da: doublemm - 02 Agosto 2010, 08:25:38
stasera provo perchè ora son al lavoro. Se non ricordo male l'unico evento che ho usato sulla textbox è key_relase dove ho scritto:

Codice: gambas [Seleziona]

makegridbox()
if key.code =key.tab then
  listbox.getfocus
endif


l'unico evento su listbox è listbox_click che dovrebbe passare il focus a valuebox ma ne key.tab ne il focus sulla value funzionano anche se il programma passa di la perchè i PRINT che ho messo fanno il loro dovere.

Vado a fare i tramezzini altrimenti i clienti i lamentano  :party:
Titolo: Re: filtrare combobox
Inserito da: Picavbg - 02 Agosto 2010, 13:01:39
stasera provo perchè ora son al lavoro. Se non ricordo male l'unico evento che ho usato sulla textbox è key_relase dove ho scritto:
Codice: gambas [Seleziona]

makegridbox()
if key.code =key.tab then
  listbox.getfocus
endif

Non so quale sia la sequenza gerarchica determinata nella creazione degli oggetti componenti la form; però se la ListBox segue nell'ordine la TextBox, prenmendo il tasto TAB_avanti il focus dovrebbe pasare automaticanmente alla ListBox, senza dovere scrivere una riga di codice.

Citazione
l'unico evento su listbox è listbox_click che dovrebbe passare il focus a valuebox ma ne key.tab ne il focus sulla value funzionano anche se il programma passa di la perchè i PRINT che ho messo fanno il loro dovere.
Se la ListBox.Cliock comprende il trasferimento dell'elemento selezionato nella TextBox, scatena l'evento TextBox.change e questo potrebbe ingenerare, secondo me, un diverso puntamento del Focus.

Ma quando tu clicchi su un elemento della ListBox, il focus, visto che non va dove te l'aspetti, in quale oggetto lo attribuisce Gambas?.
Quali sono gli oggetti interni al Form in questione e qual'é la gerarchia che hai assegnato loro?
Ciao.
Titolo: Re: filtrare combobox
Inserito da: doublemm - 02 Agosto 2010, 13:34:16
dovrei vedere stasera con il programma davanti. Giustamente come dici tu non dovrebbe servire il codice però quando premo tab dopo la textbox il focus passa ai radiobutton anche se nella gerarchia tra la text e i radio c'è la listbox
Titolo: Re: filtrare combobox
Inserito da: milio - 02 Agosto 2010, 17:30:59
Tempo fa ho avuto anch'io un problema simile...

Ho 'aggiustato' un piccolo pezzo di codice per poterti fare un esempio... vedi se ti torna utile ;)
Titolo: Re: filtrare combobox
Inserito da: doublemm - 02 Agosto 2010, 23:28:11
grazie domani provo. Sul pc da cui sto scrivendo (eeepc 1005p) non funziona più gambas e si che fino a ieri funzionava. Oggi sono riuscito a far andare la WiFi e di colpo gambas non si carica più. Uso la 2.21 quando lo lancio compare la scritta Avvio di Gambas2 ma poi sparisce tutto Bohhhh
Titolo: Re: filtrare combobox
Inserito da: ealmuno - 03 Agosto 2010, 09:26:58
grazie domani provo. Sul pc da cui sto scrivendo (eeepc 1005p) non funziona più gambas e si che fino a ieri funzionava. Oggi sono riuscito a far andare la WiFi e di colpo gambas non si carica più. Uso la 2.21 quando lo lancio compare la scritta Avvio di Gambas2 ma poi sparisce tutto Bohhhh
lancialo da terminale e posta il risultato
Titolo: Re: filtrare combobox
Inserito da: doublemm - 03 Agosto 2010, 10:47:30
dopo lo faccio appena torno a casa sul pc incriminato
Titolo: Re: filtrare combobox
Inserito da: doublemm - 03 Agosto 2010, 21:55:14
ecco l'errore:

ERROR: #2: Cannot load class 'Project': Unable to load class file
Titolo: Re: filtrare combobox
Inserito da: fsurfing - 03 Agosto 2010, 22:11:36
percaso hai qualche componente di gambas2 installato in synaptic? se si prova ad disinstallarli
Titolo: Re: filtrare combobox
Inserito da: doublemm - 03 Agosto 2010, 22:50:25
come faccio disistallo synaptic dal gestore pacchetti?
Titolo: Re: filtrare combobox
Inserito da: fsurfing - 03 Agosto 2010, 23:17:20
synaptic è il gestore di pacchetti!

apri il gestore di pacchetti , metti gambas2 nella ricerca e controlli che nessun componente sia installato , in caso contrario lo disinstalli
Titolo: Re: filtrare combobox
Inserito da: doublemm - 04 Agosto 2010, 22:22:39
niente da fare. ho disinstallato tutti i gambas dall'installatore di pacchetti però all'avvio mi chiedeva gb-qt e l'ho installato poi ogni volta un pacchetto diverso e alla fine di nuovo lo stesso errore.
Titolo: Re: filtrare combobox
Inserito da: fsurfing - 04 Agosto 2010, 22:28:33
direi che cè qualche pasticcio tra la versione compilata e quella dei repo.

prova a disinstallare nuovamente tutti i pacchetti gambas, poi se non hai cancellato la cartella dei sorgenti da cui hai compilato gambas dai un sudo make uninstall

a questo punto hai due possibilità:

o compili nuovamente ma attenzione non devi installare altri pacchetti gambas dai repo

oppure ti installi gambas dal repo e ti accontenti della versione presente.

Titolo: Re: filtrare combobox
Inserito da: doublemm - 04 Agosto 2010, 22:57:51
mi pare strano che su altri 2 pc mi va tutto alla perfezione. Quasi quasi provo a reinstallare ubuntu tanto l'ho appena preso sto pc e ho installato ubuntu da una settimana quindi si può dire ancora vergine. i problemi con gambas li ho avuti da quando sono riuscito a installare i driver per la wifi ma non credo centri perchè non ho fatto altro che installare i drive di windows xp con il solito metodo.
Titolo: Re: filtrare combobox
Inserito da: fsurfing - 04 Agosto 2010, 23:17:09
fai come credi , comunque ricordati che se compili gambas , spesso e volentieri l' installazione di alcuni componenti di gambas tramite repo (ad esempio perche installi un deb di un software realizzato con gambas) ti genera il tipo di errore da te descritto
Titolo: Q
Inserito da: doublemm - 09 Agosto 2010, 17:31:45
scusassero del ritardo ma sono stato un po incasinato sul lavoro. Nel frattempo le ho provate tutte. Siccome sono un po testardo e mi sono impuntato che voglio usare la 2.21 ho provato e riprovato ma non riesco l'errore è sempre quello. Ho aggiunto un repo e nel synaptic ora trovo le dipendenze 2.21 e non 2.19 come prima ho instalato le 2.21 ho ricompilato gambas ma non cambia nulla. Quello che mi rompe è che su altri 3 pc la 2.21 mi funziona.
Titolo: Re: filtrare combobox
Inserito da: milio - 22 Agosto 2010, 22:10:50
Ciao... volevo sapere se avevi dato un'occhiata al codice che ti avevo postato... e se avevi poi risolto con l'installazione di gambas...  ;)
Titolo: Re: filtrare combobox
Inserito da: doublemm - 23 Agosto 2010, 15:35:22
no non ho risolto nulla con l'installazione. Da oggi sono in ferie quindi proverò a fare qualcosa. Nello stesso pc dove non riesco ad installare non mi vanno nemmeno gli eeguibili di gambas.
Ho dato un'occhiata al tuo codice. Avevo fatto una cosa simile però ho visto degli spunti per i focus che mi possono interessare.
Grazie dell'aiuto.