Gambas-it

Gambas3 => Programmazione => Topic aperto da: milio - 18 Settembre 2010, 23:33:20

Titolo: gb.searchbox
Inserito da: milio - 18 Settembre 2010, 23:33:20
Componente in stile combobox, utile per ricercare velocemente frasi, nomi, indirizzi, ragioni sociali, ecc... contenute in una lista, digitando in una textbox la parola ricercata.

Titolo: Re: gb.searchbox
Inserito da: fsurfing - 19 Settembre 2010, 00:14:25
molto bello davvero :)

solo non mi piace l' utilizzo di una collection per il searchbox.list

percui sto utilizzandone una versione  "limata" utilizzando un semplice array  string[] per la lista e una listbox per la visualizzazione


cè un motivo particolare per cui hai scelto la collection ?
Titolo: Re: gb.searchbox
Inserito da: fsurfing - 19 Settembre 2010, 00:30:23
giusto perchè sono una contraddizione vivente ho modificato le funzioni di ricerca del mio programma perchè forniscano una collection anzichè un array, così posso utilizzare appieno il tuo lavoro.

molto bello il tooltip fermando il mouse su un oggetto della lista :)

grazie mille del lavoro e scusa se non ho potuto utilizzarlo prima
Titolo: Re: gb.searchbox
Inserito da: fsurfing - 19 Settembre 2010, 11:02:42
l' unico problema riscontrato è l' impossibilità di abbinare una successione via software di focus a più searchbox, per il resto è veramente un ottimo lavoro!
http://www.tutto-opensource.org/gesthotel/smf/index.php?topic=186.0 (http://www.tutto-opensource.org/gesthotel/smf/index.php?topic=186.0)

Titolo: Re: gb.searchbox
Inserito da: milio - 19 Settembre 2010, 11:37:16
Non ho capito bene... intendi che non si riesce a dare il searchbox.SetFocus() ? se e' cosi' lo risolviamo subito ;)
Titolo: Re: gb.searchbox
Inserito da: fsurfing - 19 Settembre 2010, 22:56:42
praticamente , nel form ho parecchie searchbox, l' ordine con cui sono state disposte non è l' ordine che vorrei seguisse il focus,

provando a modificare la gerarchia il focus se gue comunque sempre l' ordine di creazioen e non quello della gerarchia(questo probabilmente un bug di gambas3)
non volendo ricrearle in ordine corretto , ho provato a mettere sull' evento lostfocus della prima searchbox il comando setfocus della searchbox che voglio abbia il focus e così via

posizionandomi sulla prima searchbox e premendo tab il focus passa alla seconda e subito in cascata a tutte le altre .

non è molto importante ,anche perchè per risolvere mi basta modificare la disposizione dei vari campi per portarle in ordine, solo volevo segnalarti questo piccolo bug nella tua splendida classe.
ps: mi pare di ricordare che tempo fa avessi fatto un nuovo tipo di calendario, prox lo guardo
ciao ciao e ancora grazie dell' ottimo lavoro
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 19:03:52
Milio, sei unico!  :ok:

Ho provato il componente (v. 0.0.4) su g3 ed è efficientissimo! Funziona a meraviglia.
Stavo per installarlo... quando l'Install mi si è bloccato appena ho caricato la cartella del componente. Non c'è verso, si blocca sempre.

Per installare il GridBox non ho avuto questo problema... da che può dipendere?
Titolo: Re: gb.searchbox
Inserito da: Golia - 03 Novembre 2010, 19:22:05
@perseo
Lo sapevi che searchbox è implementato anche su gridbox!
Devo però farmi fare un esempio da milio, corre troppo e non si riesce a stargli dietro  ;D  :2birre:
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 19:25:34
[Edit]
Guardando nei sorgenti del GOSH di fsurfing ho notato che lui ha importato direttamente il componente come: Searchbox.class ed FList.form.
Se ho capito bene questo componente a differenza di GridBox non si installa, ma va importato da codice...
Quindi per richiamarlo, quando mi serve nel progetto, lo devo fare da codice istanziando l'oggetto. Giusto?
[/Edit]

@ Golia,

Sì, lo avevo notato tra le classi del componente GridBox! Però non avevo capito di quanto fosse utile anche da solo (e soprattutto non mi rendevo conto che potevo anche riciclarlo da solo, grazie alla OOP)... :)
Titolo: Re: gb.searchbox
Inserito da: fsurfing - 03 Novembre 2010, 20:16:14
ho optato per questa soluzione perchè reputo sia il miglior modo  per facilitare la distribuzione di un software gambas con all' interno dei componenti non presenti nei repo ufficiali
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 20:20:08
Ottimo!

Ce l'ho fatta! Il componente è perfettamente funzionante, ed è anche questo meraviglioso! Lo userò all'impossibile perché è proprio bello.
Nel frattempo ho anche riscontrato una cosa... Se il menu è attivo la lista della searchbox viene visualizzata più in basso, tanto quanto è l'Height del menù. Per riportarla a livello della casella cosa bisogna settare? :ok:

Non vorrei settare la classe ma ogni istanza (nell'ottica mi servisse una searchbox in un form con menu ed un'altra in un form senza menu...).
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 20:39:27
Stai usando gtk o qt? Mi puoi inviare un'immagine ?
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 20:57:57
(http://img169.imageshack.us/img169/9606/searchbox01.png)

http://img169.imageshack.us/img169/9606/searchbox01.png

Il progetto è quello tuo (gb.searchbox v.0.0.4), che ha le gb.qt abilitate. Ho solo aggiunto il menu alla tua Form di esempio.

Io uso Ubuntu (non vorrei fosse un conflitto dovuto a Gnome).

[Edit]
Inserendo il panel_searchbox in un altro contenitore, il dislivello c'è più e la lista viene visualizzata correttamente...
[/Edit]
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 21:18:31
Ok adesso ho capito, sai ho la testa dura come la pietra io  :mad:

Vedo che posso fare e ci aggiorniamo stasera...
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 22:19:32
Ecco qua! Dovrebbe funzicare... provare per... smentirmi  ;D
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 22:42:55
Testato...

Nella versione13 non c'è più il problema del menu, però ne è comparso un altro che nella versione4 non dava: Quando inserisci la serchbox in un contenitore con Arrangement diverso da "none", la lista compare come se fosse un ulteriore oggetto di quel contenitore... Ad esempio, se dai al FMain Arrangement "Vertical" --> incolonna tutti gli oggetti... e la lista viene incolonnata per ultima.
Ho controllato, e sulla v4 questo problema non si verificava.

(http://img101.imageshack.us/img101/4097/searchbox02.png)

https://img101.imageshack.us/img101/4097/searchbox02.png

PS: nella figura "Arrangement None" non si compare... ma la lista si visualizza bene.
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 22:45:32
Ecco qua! Dovrebbe funzicare... provare per... smentirmi  ;D

Ecco appunto...  ;D

Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 22:57:21
La v14 è perfetta!  :2birre:

[Edit]
Purtroppo mi sono appena accorto che nel mio progetto da problemi... La lista di una searchbox viene visualizzata correttamente, in un'altra searchbox no (in un altro container). Devo capire se dipende da come ho sistemato il mio layout oppure se è il componente. Molto probabilmente dipende dal mio progetto. Indago...  ???
[/Edit]
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 23:01:04
Ok, bene....  :4birre:
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 23:28:07
(http://img13.imageshack.us/img13/8853/searchbox03.png)

http://img13.imageshack.us/img13/8853/searchbox03.png

Come vedi... la FMain è un po' incasinata. Ha un Arrangement.Vertical ed un menu (switch).

Dentro la FMain ci sono 3 conteiner:
Il primo, .horizontal, è quello della toolbar.
Il secondo, .none, è quello con la searchbox incriminata  ;D , che apre la lista una decina di cm più giù.
Il terzo, .horizontal, è quello che contiene i formfigli... tipo il calcolatore_del_codice_fiscale a sn (che ha delle searchbox che si aprono correttamente) ed una gridbox a dx...

 ???

PS: chiaramente la listbox_dei_comuni tra un po' scompare per far post ad una bella searchbox...  :)
Titolo: Re: gb.searchbox
Inserito da: milio - 03 Novembre 2010, 23:32:20
mi puoi postare il progetto... cosi' posso vedere a livello di codice che cosa non va...
Titolo: Re: gb.searchbox
Inserito da: perseo - 03 Novembre 2010, 23:55:56
Progetto, è un parolone...  :rotfl:

Finora sono solo un mucchio di tests...  :)



Titolo: Re: gb.searchbox
Inserito da: perseo - 04 Novembre 2010, 00:35:17
L'ho trovato...  :)

In pratica dipende dalla centratura dell'FMain:

me.Center

Se lo tolgo la lista viene visualizzata correttamente. Ho verificato anche nel sorgente della v.14 ...stesso difetto (invece il sorgente della v.4 funziona correttamente).
Titolo: Re: gb.searchbox
Inserito da: milio - 04 Novembre 2010, 00:56:11
Bene... mi hai evitato una seccatura :)

Ps. Io comunque, ti ritorno a dire che il workspace e' da prendere in considerazione...
Titolo: Re: gb.searchbox
Inserito da: perseo - 04 Novembre 2010, 01:09:40
Ps. Io comunque, ti ritorno a dire che il workspace e' da prendere in considerazione...

La soluzione del workspace sarebbe decisamente più comoda (visto che mi eviterei anche tutti i controlli di visibilità e di passaggio da una finestra ad un'altra...).
La cosa che però non mi convince è che ogni area di lavoro sarebbe selezionabile dalle linguette. E quindi, anziché la toolbar mi ritroverei le linguette... che graficamente non mi fanno impazzire.
Assomiglierebbe ad una grossa Tabstrip. La mia scelta è puramente grafica...

Mi spiegheresti i motivi tecnici (che sicuramente io ignoro per manifesta nubbiezza) perché tu preferiresti l'uso del workspace alla tecnica di concatenamento dei forms?
Titolo: Re: gb.searchbox
Inserito da: milio - 04 Novembre 2010, 01:43:48
Innanzi tutto il menu lo puoi avere a destra (o a sinistra) e che si puo' rendere invisibile aumentando lo spazio di lavoro...
Ci sono le linguette, e' vero, ma sai quante volte ho bestemmiato con applicazioni come access per cercare una finestra aperta in mezzo, sopra e dove diavolo e' finita....
Se hai notato, cliccando con il tasto destro sulle linguette, ti viene fuori un menu a popup con elencati tutte le tue finestre aperte, con possibilita' di chiuderle tutte di botto...

ti allego una slide di un mio vecchi programma che serve per contare il pezzame fatto in g2... (scusami ma non ho niente di meglio da farti vedere a quest'ora)...

Ps... se poi non ti convinco ti posso fare anche un esempio :)
(http://milio.appix.net/Immagini/schermata3.png)
Titolo: Re: gb.searchbox
Inserito da: milio - 04 Novembre 2010, 01:52:15
Adesso dovrebbe... meglio che non dico niente  :-[
Titolo: Re: gb.searchbox
Inserito da: perseo - 04 Novembre 2010, 02:13:30
Ora è proprio OK!  :ok:

OT: ...sul WorkSpace mi hai convinto! In definitiva la tecnica dei forms concatenati era anche un modo per capire meglio il funzionamento delle classi, ecc. Ancora non mi sento pronto per cominciare "seriamente" il mio progetto e sto ancora sperimentando... Soprattutto vorrei capire meglio l'uso delle classi, come si crea una classe (molto l'ho capito sul campo... seguendo i tuoi componenti, o le varie indicazione che finora mi avete dato), ecc.
Intanto sono riuscito a capire questa guida, che prima mi rimaneva piuttosto ostica.  :)

http://www.gambas-it.org/wiki/index.php/CREATE_PRIVATE...CREATE_STATIC (http://www.gambas-it.org/wiki/index.php/CREATE_PRIVATE...CREATE_STATIC)

La cosa importante è che ogni volta che rileggo una delle tante guide trovo sempre degli spunti in più e noto cose che nelle precedenti letture mi erano sfuggite. Questo è molto confortante!  :)
Titolo: Re: gb.searchbox
Inserito da: Ceskho - 04 Novembre 2010, 19:47:29
Ora è proprio OK!  :ok:

OT: ...sul WorkSpace mi hai convinto! In definitiva la tecnica dei forms concatenati era anche un modo per capire meglio il funzionamento delle classi, ecc. Ancora non mi sento pronto per cominciare "seriamente" il mio progetto e sto ancora sperimentando... Soprattutto vorrei capire meglio l'uso delle classi, come si crea una classe (molto l'ho capito sul campo... seguendo i tuoi componenti, o le varie indicazione che finora mi avete dato), ecc.
Intanto sono riuscito a capire questa guida, che prima mi rimaneva piuttosto ostica.  :)

http://www.gambas-it.org/wiki/index.php/CREATE_PRIVATE...CREATE_STATIC (http://www.gambas-it.org/wiki/index.php/CREATE_PRIVATE...CREATE_STATIC)

La cosa importante è che ogni volta che rileggo una delle tante guide trovo sempre degli spunti in più e noto cose che nelle precedenti letture mi erano sfuggite. Questo è molto confortante!  :)

Chiedo cortesemente di rimanere quanto più possibili legati agli argomenti del topic. Avrete modo di trattare workspace e roba simile in altri post per altre cose....
Titolo: Re: gb.searchbox
Inserito da: perseo - 04 Novembre 2010, 20:04:36
Scusami Cescho, hai perfettamente ragione.

Comunque quando ho visto la piega dell'OT, visto che l'argomento mi interessa parecchio, ho aperto un thread apposito.  :)
Titolo: Re: gb.searchbox
Inserito da: pirandello - 07 Novembre 2010, 21:11:54
Adesso dovrebbe... meglio che non dico niente  :-[

Complimenti x l'ottima classe (anch'io la uso al posto del combobox), ma se mi è consentito dire una parolina ho verificato un errore durante il funzionamento (a dire il vero incasinando un po' i tasti) e come avrò un po' di tempo cercherò di capire cosa c'è che non va: io uso G3.
Allo stato attuale è la soluzione migliore per sostituire egregiamente combobox: un grazie, e credo di non sbagliarmi, a nome di tutta la comunità.

 
Titolo: Re: gb.searchbox
Inserito da: pirandello - 08 Novembre 2010, 12:21:40
x Milio

1) Se uso più SearchBox in un form e volessi conoscere il nome o il tag del Searchbox attivo utilizzando la

Public Sub Search_LostFocus()

non posso così come è la classe , vero?

2) Altra cosa che ho notato che manca è che il focus del controllo non segue la gerarchia, e quindi si è costretti ad utilizzare il setfocus per rendere attivo il controllo.

Potresti integrarle nella prossima release?
Grazie
 
Titolo: Re: gb.searchbox
Inserito da: milio - 08 Novembre 2010, 15:46:12
Quale versione hai scaricato? Per Gambas2 o 3?
Titolo: Re: gb.searchbox
Inserito da: pirandello - 08 Novembre 2010, 16:16:29
La versione che io uso è la gb.searchbox-0.0.15 x G3.

Per ultimo, si potrebbe integrare anche la POS del cursore al suo interno?
Mi spiego, quando io provo a ricercare ogni volta che pigio un tasto la classe mi trova le parole che contengono quello che io ho scritto

 If Scan($List[$List.Key], "*" & Me.Text & "*").Count > 1 Then .ListView1.Add($List.Key, $List[$List.Key])

fin qui tutto pacifico, ma se io faccio inserire un valore con una riga di comando in Searchbox (Searchbox.text = "mio testo") mi apre una listbox e mi visualizza un elenco (o la sola parola chiave) che contiene la chiave che avevo precedentemente cercato; adesso arrivo al dunque: se io ho un POS posso dire che a posizione 0 non devi aprire la lista (e quindi cominciare la ricerca del testo solo dopo che io ho digitato) e semmai fare una verifica del contenuto solo con un Lostfocus (qualora non dovessi digitare niente e confermare il contenuto)
Cosa ne pensi?

 
Titolo: Re: gb.searchbox
Inserito da: milio - 08 Novembre 2010, 16:28:47
Non e' che ho capito tanto, ma se e' la proprietà Pos che ti serve vedro' di fartela avere per stasera (connessione telecom permettendo  >:( )
Titolo: Re: gb.searchbox
Inserito da: pirandello - 08 Novembre 2010, 18:17:43
Non e' che ho capito tanto, ma se e' la proprietà Pos che ti serve vedro' di fartela avere per stasera (connessione telecom permettendo  >:( )
A dire il vero sarebbero due le cose:
1) NAME o TAG (quando si utilizzano più SearcherBox in un Form per poterlo individuare)
2) POS (per i motivi che ti ho spiegato prima)
 
Grazie
Titolo: Re: gb.searchbox
Inserito da: pirandello - 08 Novembre 2010, 21:29:40
Non e' che ho capito tanto, ma se e' la proprietà Pos che ti serve vedro' di fartela avere per stasera (connessione telecom permettendo  >:( )
A dire il vero sarebbero due le cose:
1) NAME o TAG (quando si utilizzano più SearcherBox in un Form per poterlo individuare)
2) POS (per i motivi che ti ho spiegato prima)
 
Grazie

Nuovo aggiornamento:
C'è un errore se digiti le vocali accentate

3) SETFOCUS  se è possibile aggiungerlo.
Grazie
Titolo: Re: gb.searchbox
Inserito da: milio - 09 Novembre 2010, 14:25:25
Alura... telecom mi ha abbandonato :(

Sezione "gia' ci stava"

  Evento LostFocus
  Proprietà Tag
  Proprietà Name
  Metodo SetFocus

Sezione "giuntine"

  Proprietà Pos
  Proprietà Selected
  Proprietà Selection
  Metodo Select
  Metodo SelectAll
  Proprietà SearchOnPress

tutte le "giuntine" (tranne l'ultima) non sono altro che proprietà/metodi dell'oggetto TextBox che e' parte integrante del componente.
La proprietà SearchOnPress se settata a True visualizzera' la lista di ricerca solo se si sta digitando all'interno del SearchBox...
Titolo: Re: gb.searchbox
Inserito da: pirandello - 10 Novembre 2010, 13:56:34
Alura... telecom mi ha abbandonato :(

Sezione "gia' ci stava"

  Evento LostFocus
  Proprietà Tag
  Proprietà Name
  Metodo SetFocus

Sezione "giuntine"

  Proprietà Pos
  Proprietà Selected
  Proprietà Selection
  Metodo Select
  Metodo SelectAll
  Proprietà SearchOnPress

tutte le "giuntine" (tranne l'ultima) non sono altro che proprietà/metodi dell'oggetto TextBox che e' parte integrante del componente.
La proprietà SearchOnPress se settata a True visualizzera' la lista di ricerca solo se si sta digitando all'interno del SearchBox...


Scaricata, adesso la provo e ti faccio sapere.... :-* (in senso amichevole)
Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 14:56:00
Una domanda sul Focus delle SearchBox...
Per far ricevere il focus ad una searchbox posizionata tra diverse textbox ho pensato che fosse sufficiente gestire la sequenza della lista "gerarchia". Però non essendo un controllo textbox ma un panel non mi funziona...
Come si fa a farle ricevere il focus dopo aver premuto il tasto TAB nel controllo precedente? Devo darglielo da codice (dal _LostFocus del controllo precedente?) oppure c'è un modo più veloce (da quella in "gerarchia" non me lo passa), tipo una sequenza numerica come si usava per VB6?

PS: mi sono accorto che manca l'evento GotFocus... Nelle Textbox lo uso per evidenziare i campi che hanno ricevuto il focus, cambiando il colore di Background.
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 15:37:30
il problema non posso risolverlo, o almeno non ho ancora trovato soluzione.

Quindi o gestisci tutto via codice o ti installi il componente, in modo che crei l'oggetto direttamente dall'ide di gambas come fai per una textbox..

Aggiunto GotFocus ;)
Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 15:57:06
[edit]

Ok!!! l'ho installato!  :ok:
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 15:59:02
hai cambiato l'admin utility? io con kde uso kdesudo....
Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 16:01:54
Scusa Milio,

l'ho installato correttamente. Ora il componente è visibile sotto i "gambas-it.org"  :ok:
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 16:03:25
ok...

ma non avevi fatto questa procedura anche per la gridbox?
Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 16:13:21
Si, esatto.

Solo che quando la ripetevo per le searchbox mi andava in blocco l'install. Forse sbagliavo qualcosa, perché ora me l'ha installato...  ???

Ho un problema... quando lancio il runtime mi va in errore sulla SearchBox, "Cannot load class 'SearchBox': Multiple Inheritance".

PS: Dai sorgenti ho cancellato sia la classe "SearchBox" che la form "Flist"...
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 16:16:34
Una volta cancellate le classi prova a fare Progetto --> Ridisegna Progetto
Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 16:22:27
Con "Ridisegna" andava ugualmente in errore... poi ho provato con "aggiorna tutte le form" ed ho risolto!  :ok:
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 16:24:58
ecco, appunto era la prossreima prova da fa :)
Titolo: Re: gb.searchbox
Inserito da: milio - 10 Novembre 2010, 16:28:46
Ritornando sull'argomento delle gerarchie dei controllli, ho visto che ogni controllo ha due proprietà che in teoria ti danno l'ordine del focus:
.Next e .Previous

Sono proprietà Read Write ma se setto una di queste proprietà con un controllo a mia scelta, sembra che continui a mantenere l'ordine originale...
 :-\

Titolo: Re: gb.searchbox
Inserito da: perseo - 10 Novembre 2010, 16:37:27
Avevo provato anch'io qualcosa del genere con .next e con .previous perché ho dei controlli su container differenti. Ma alla fine ho optato per gestire il focus da codice, con .setFocus all'evento KeyPress --> Key.Tab...
Almeno inserendo le search da ide non devo gestire anche quelle, perché come dicevi prima, ora seguono l'andamento della "gerarchia".

Invece quest'altra cosa è magnifica... La searchbox si comporta esattamente come una textbox.
Nel mio codice mi sono creato (seguendo sempre i tuoi insegnamenti :) ) questa Sub per pulire tutti i campi di testo presenti nel form... e pulisce anche quelli dei SearchBoxs.  ;)

Codice: vb.net [Seleziona]
Public Sub pulizia(Optional salta As String)
Dim txt As Control
  For Each txt In Me.Controls
    If (Object.Class(txt).Name) = "TextBox" Or (Object.Class(txt).Name) = "TextArea" Then
      If txt.name <> salta Then Object.SetProperty(txt, "Text", Null)
    Endif
  Next
End


Nel loop il nome del campo Text della SearchBox viene rilevato come "Txt".

PS: ho fatto anche un'altra Sub simile per colorare e per settare il font di tutte le label...  ;D
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 16:25:18
Milio,

un chiarimento importante

Ho guardato il codice di come viene popolata la lista della searchbox, che è una collection...
In questa collection c'è un Value ed un Key...

Ipotizza che nella mia ricerca, per il campo specificato ci sono più risultati uguali (nel pratico cerco i comuni d'italia, e ce ne sono ad esempio 2 che si chiamano "BRIONE"). Quando seleziono uno dei due nella txt della searchbox mi viene visualizzato il nome "BRIONE" (però come faccio a distinguerli)...
La mia domanda è... posso contemporaneamente inserire anche il CodiceIstat in un'altra casella?

Una soluzione potrebbe essere quella di impostare il VALUE come una stringa che mi restituisca nella txt della searchbox il NomeComune & " " & CodiceIstatComune... Però io volevo sapere se la searchbox permette la restituzione di array, e se sì come richiamarlo per popolare contemporaneamente più textbox...

Nel mio programma scelgo il nome di un Comune d'Italia (con una searchbox).
Poi, con il nome del comune scelto, faccio fare delle Query che mi restituiscono i valori degli altri campi, che inserisco nelle apposite textbox. Da qui l'errore quando c'è omonimia di nomi di comuni (tipo "BRIONE"). In pratica è come se perdessi il filo logico, ed usassi un campo "non-univoco" (tipo il nome del cognome) per recuperarlo...
I campi secondari tipo: CodiceIstat, Provincia, Regione, ecc. si trovano nella stessa tabella del Comune --> quindi mi chiedevo se con un'operazione (scelta del nome) potevo ottenere direttamente tutti i campi.

La mia idea è... nella lista dovrebbe comparire: NomeComune & ", " & ProvinciaComune (---> Milano, MI)
mentre nel risultato avrei un array con Milano, MI, Lombardia, [n° codistat], ecc...
In questo modo potrei popolare tutte le altre textbox (all'evento _Focus della searchbox).


[Edit]
Ho provvisoriamente risolto... restituendo come risultato una stringa con (Comune - Provincia - CodiceIstat)
Nell'evento _Focus poi gli faccio dividere la stringa con split e prendo le porzioni trimmate (ossia senza spazi a inizio e fine).
La stringa[0] riscrive la txt della searchbox, mentre la stringa[2] riscrive la textCodiceIstat.text...
Non mi piace molto, ma almeno è funzionale... Però se c'è di meglio, tipo soluzioni con restituzione di array, sono pronto a modificare immediatamente il mio arzigogolato codice!  :)
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 17:20:29
Quando ho fatto la SearchBox l'ho ragionata in questo modo:

Key = codice univoco del record
Value = descrizione per la ricerca

Sta a te decidere quale sia il campo Key per poter riconoscere il risultato cercato...

Nel tuo caso, dato che lavori con un file tipo csv, dovresti crearti una spece di record con un array di tipo String[][] e potresti mettere come key l'Index dell'array che hai creato per importarti il file.
Nel Value, come tu giustamente hai detto, NomeComune, Provincia (Es: "Montjovet, AO")

quando la SearchBox, nell'evento Found (e non LostFocus) ti restituisce il Key basta che popoli le varie TextBox in questo modo: Me.TextBox1.Text = MioArray[Me.SearchBox.Key][<Numero del Campo>]

Tutto ok? ;)
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 18:27:35
Se ho capito bene l'Array che mi devo creare è una variabile Public indipendente dalla searchbox.

Per popolarla, quando eseguo la Query (ho importato il file csv dei comuni in una Tabella dentro il database...) e costruisco il risultato (ossia la collection della lista della searchbox), aggiungo all'array tanti campi quanti sono quelli che m'interessano.

Per ogni record aggiunto alla collection... devo aggiungerne uno all'array rispettando lo stesso indice.
Poi mi richiamo l'indice di questo array attraverso il searchbox.Key... e di questo sub-array mi cerco la stringa che interessa a me.

Giusto?
Intanto ci provo...  :)

PS: l'evento che uso è proprio Found... ma non so perché continuo a scrivere Focus...  :rolleyes:
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 20:32:32
Ho provato, ma con scarsi risultati...  :-[

Mi rendo conto che le mie carenze nascono dalla non-conoscenza degli Array, bidimensionali.

Nella Sub della query per popolare la lista della searchbox ho dichiarato questo:

Codice: vb.net [Seleziona]
Public mioArray As New String[][]

Public Sub ricercami(campo As String, dato As String) As Collection
    Dim sName As String
    Dim sPercorso As String
    Dim $hRicerca As New Connection
    Dim sql As String
    Dim ris As String
    Dim i As Integer
    Dim hres As Result
    Dim risultato As New Collection
    Dim primo As New String[]
    
    With $hRicerca
      .Type = avvio.sDbType
      .Host = avvio.sDbPath
      .Login = avvio.sDbLogin  
      .Password = avvio.sDbPass
      .Name = avvio.sDbName
    End With
  
    $hRicerca.Open
      $hRicerca.Begin
      
            sql = "SELECT * FROM comuni WHERE " & campo & " LIKE '%" & my(dato) & "%';"
  
            hres = $hRicerca.Exec(sql)
            
            If hres.Available Then
              mioArray.Clear
              i = 0
              For Each hres
                primo.Clear
                primo.Add(hres!comune, 0)
                primo.Add(hres!prov, 1)
                primo.Add(hres!codistat, 2)
                mioArray.Add(primo, i) ' --> questo dovrebbe popolare il mioArray bidimensionale
                ris = hres[campo] & " - " & hres!prov
                risultato.Add(ris, i) ' --> questo va a popolare la lista della searchbox
                Inc i
              Next
            Endif
      $hRicerca.Close
  
  Return risultato
End



Quando però chiamo l'evento _Found...
Codice: vb.net [Seleziona]
Public Sub sbxLuogoNasc_Found()
  Message(mioArray[Me.sbxLuogoNasc.key][2])
End


...mi restutisce sempre l'ultimo record dell'Array, ossia l'ultimo CodiceIstat della lista della searchbox sbxLuogoNasc.  :rolleyes:
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 21:17:15
Allora... premesso che ho detto un sacco di str.....e, forse perche' stavo per uscire dall'ufficio e ho letto velocemente il tuo post, ma anche tu! come fai ha prendermi sempre in parola   :mad:   ;D ;D ;D ;D

Stendiamo un velo pietoso su quello che ho scritto prima... io ero rimasto che tu avevi un file csv da caricare in un array... non avevo letto che l'hai caricato in un database...

Basta allora che fai in questo modo:

Codice: vb.net [Seleziona]
Private RecComuni as Result

Public Sub CaricoLista()
Dim Rec As Result
Dim Nx As Integer

  RecComuni = MiaConn.Exec("Select * From Comuni;")
  For Nx = 0 To RecComuni.Max
    RecComuni.MoveTo(Nx)
    Me.SearchBox1[Nx] = Rec["Comune"] & ", " & Rec["Provincia"]
  Next

End

Public Sub SearchBox1_Found()

  RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))
  Me.TextBox1.Text = Rec[quellochevuoi]
  'ecc ecc ecc

End
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 21:52:16
Non ci riesco proprio... :rolleyes:

Nel codice che mi hai indicato ci sono due variabili result: Rec e RecComuni

Ma Rec, come viene generato?
E poi se Rec è una Dim, come faccio a richiamarla nella Sub _Found?

Questa riga mi va in errore: Not An Array... --> Me.SearchBox1[Nx] = Rec["Comune"] & ", " & Rec["Provincia"]
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 21:53:29
Scusa...  :-[

Dim Rec va cancellato

e Rec[quellochevuoi] e' RecComuni[quellochevuoi]
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 21:55:01
Meglio che ti riscrivo tutto

Codice: vb.net [Seleziona]
Private RecComuni as Result  
  
Public Sub CaricoLista()    
Dim Nx As Integer  
  
 RecComuni = MiaConn.Exec("Select * From Comuni;")  
 For Nx = 0 To RecComuni.Max  
   RecComuni.MoveTo(Nx)  
   Me.SearchBox1[Nx] = RecComuni["Comune"] & ", " & RecComuni["Provincia"]  
 Next  
  
End  
  
Public Sub SearchBox1_Found()  
  
 RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))  
 Me.TextBox1.Text = RecComuni[quellochevuoi]  
 'ecc ecc ecc  
  
End  
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 21:57:20
Mi da errore su questa riga: Not An Array... --> Me.SearchBox1[Nx] = RecComuni["Comune"] & ", " & RecComuni["Provincia"]

PS: un'altra cosa... per abitudine apro e chiudo le connessioni appena eseguite le operazioni di ricerca, ed il risultato mi viene restituito con return. Se chiudo la connessione dovrebbe chiudersi anche RecComuni, che è un suo risultato, o no? Potrei restituire risultato direttamente il result?
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 22:01:27
spero che questa sia l'ultima volta che riscrivo sto pezzo di codice.... mmiiiiii che palle

Codice: vb.net [Seleziona]
Private RecComuni as Result    
  
Public Sub CaricoLista()      
Dim Nx As Integer    
  
RecComuni = MiaConn.Exec("Select * From Comuni;")    
For Nx = 0 To RecComuni.Max    
  RecComuni.MoveTo(Nx)    
  Me.SearchBox1.List[Nx] = RecComuni["Comune"] & ", " & RecComuni["Provincia"]    
Next    
  
End    
  
Public Sub SearchBox1_Found()    
  
RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))    
Me.TextBox1.Text = RecComuni[quellochevuoi]    
'ecc ecc ecc    
  
End  
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 22:38:26
Non so perché ma se non aggiungevo un... Me.SearchBox1.List.Clear ...prima del ciclo di Nx, mi restituiva dei record duplicati.  ???

Ora però c'è un problema... Io di solito apro una connessione e la chiudo subito dopo aver eseguito le operazioni (ed il risultato lo ottengo con Return).
In questo modo la variabile RecComuni result viene anch'essa chiusa e quindi quando è chiamata nell'evento _Found il programma va in errore.
Potrei a questo punto farmi restituire il result direttamente dalla Sub?
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 22:42:03
mmm...  :rolleyes:

prova a passarmi il codice, se non ti fa niente... magari io la vedo in un modo (e la scrivo anche male  :P) magari c'e' qualcosa che a me sfugge...

Titolo: Re: gb.searchbox
Inserito da: Ceskho - 11 Novembre 2010, 22:43:14
Non so perché ma se non aggiungevo un... Me.SearchBox1.List.Clear ...prima del ciclo di Nx, mi restituiva dei record duplicati.  ???

Perchè per quanto il componente è intelligente non può capire da solo che si deve ripulire prima di riempirlo.... ;)
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 22:45:05
Bhe si certo... se richiami per due volte la sub CaricaLista e' ovvio che ti duplica i record
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 22:51:03
E' stata sofferta ma l'abbiamo fatta...  :2birre:

In pratica mi faccio restituire il RecComuni dalla Sub... e poi posso tranquillamente cercare i dati che mi servono nell'evento _Found...

Poi quando ho finito e RecComuni non mi serve più la annullo con RecComuni = Null. Non so se quest'ultima operazione è sensata, ma se non lo faccio mi da l'idea che la variabile rimane in memoria e può crearmi dei brutti scherzi dopo...
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 22:58:28
In teoria, quando chiudi il form, Gambas dovrebbe eliminare tutti gli oggetti e variabili dalla memoria... poi non so, magari sto dicendo castronerie... del retroscena non me ne intendo tanto  :-\
Titolo: Re: gb.searchbox
Inserito da: Ceskho - 11 Novembre 2010, 23:04:10
In teoria, quando chiudi il form, Gambas dovrebbe eliminare tutti gli oggetti e variabili dalla memoria... poi non so, magari sto dicendo castronerie... del retroscena non me ne intendo tanto  :-\

Effettivamente è così...ha differenza di altri linguaggi più "profondi" che prevedono che il programmatore liberi lo spazio allocato, gambas gestire tutto con la propria mappatura di memoria...
Titolo: Re: gb.searchbox
Inserito da: milio - 11 Novembre 2010, 23:08:44
Allora dico bene, o dico giusto?  :P
Titolo: Re: gb.searchbox
Inserito da: Ceskho - 11 Novembre 2010, 23:25:00
Allora dico bene, o dico giusto?  :P

Diciamo che dici esatto... ;D
Titolo: Re: gb.searchbox
Inserito da: perseo - 11 Novembre 2010, 23:29:07
Nel mio dubbio ...all'evento _LostFocus della searchbox do un RecComuni = Null.  :)
Titolo: Re: gb.searchbox
Inserito da: md9327 - 15 Novembre 2010, 13:21:10
Per gli oggetti e le variabili create, è possibile fare pulizia anche nel metodo nascosto _free().

Ma attenzione ai NULL, o agli oggetti invalidi!!!
Titolo: Re: gb.searchbox
Inserito da: perseo - 18 Novembre 2010, 14:08:16
Zio Milio,

mi sono studiato i sorgenti della tua SearchBox e me ne sono settata una personalizzata... niente di ché... ho solo aggiunto un evento pressione_tasti (NoListKeypress) quando non è visibile la lista , e poi ho messo predefiniti i colori di found, notfound e popup. Infine ho sistemato settato il background: giallo quando riceve il focus, default quando lo perde...

Se ho capito, con lo stesso criterio vorrei realizzarmi una TextBox personalizzata, con già predefinito il background quando si riceve o meno il focus. Poi nella SearchBox gli faccio caricare quella personalizzata, anziché la TextBox.
In più vorrei inventarmi qualcosa con la pressione dei tasti...
E poi vorrei metterci delle proprità tipo:
- sulla formattazione dei caratteri (Tutto maiuscolo, Tutto Minuscolo, Prime lettere di ogni parola in Maiuscolo...)
- sui caratteri possibili (solo numeri, solo lettere, ecc.)
- formato maschera inserimento
- ecc... se ci viene in mente qualcos'altro  ;)
Una specie di ValueBox, però con più settaggi...

 :2birre:

PS. Sto pensando di inserire queste piccole modifiche come proprietà, tipo Highlight True/False, ecc.