Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 27 Dicembre 2014, 11:54:32

Titolo: [Risolto] Utilizzo di una ListBox
Inserito da: Franco_da_vc - 27 Dicembre 2014, 11:54:32
Per inserire una lista dei mesi ho usato una ListBox, ma sto pensando di non aver usato la struttura adatta.

In poche parole i vari mesi dovrebbero assumere una particolare colorazione se esiste o meno del file relativo al mese stesso, il problema e che ho trovato il modo per imporre il colore di background, ma ciò avviene per tutta la lista e non trovo il comando per imporlo ad un solo elemento della stessa.

Esiste il comando adatto per la ListBox o veramente devo usare un'altra struttura e quale?

A proposito:
:ot: ho notato che richiedendo l'anteprima del post non si ottiene nulla, è un problema del mio sistema o c'è qualcosa che non va nella struttura del forum? :ot:

Grazie e ciao a tutti!
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 28 Dicembre 2014, 21:49:42
L'unico metodo che conosco è quello di selezionare la riga pertinente al mese che vuoi fare risaltare.  :D

ho notato che richiedendo l'anteprima del post non si ottiene nulla, è un problema del mio sistema o c'è qualcosa che non va nella struttura del forum? :ot:

Per quest'ultimo quesito, posso dirti che a me lì'anteprima funziona perfettamente, però faresti meglio, visto che l'argomento affronta un tema diverso dal corrente, ad aprire una nuova specifica discussione in  "Domande Tecniche" o "Segnalazione Bug".

 :ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 28 Dicembre 2014, 23:03:13
...a me lì'anteprima funziona perfettamente, però faresti meglio, visto che l'argomento affronta un tema diverso dal corrente, ad aprire una nuova specifica discussione in  "Domande Tecniche" o "Segnalazione Bug".

Il problema è stato già sollevato da Gianluigi:
http://www.gambas-it.org/smf/index.php?topic=3825.msg34574#msg34574
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 29 Dicembre 2014, 16:54:18
L'unico metodo che conosco è quello di selezionare la riga pertinente al mese che vuoi fare risaltare.


In effetti sembra essere l'unica soluzione.

Volendo ad esempio evidenziare la riga num. 2 (quindi indice 1):
Codice: gambas [Seleziona]
ListBox1[1].Selected = True
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 30 Dicembre 2014, 00:24:58
In effetti sembra essere l'unica soluzione.

Volendo ad esempio evidenziare la riga num. 2 (quindi indice 1):
Codice: gambas [Seleziona]
ListBox1[1].Selected = True


 :blabla:
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 30 Dicembre 2014, 00:31:16

 :blabla:

Ho capito perfettamente quello che intendi dire, ma sai bene che queste pagine vengono lette nel tempo anche da persone non esperte.
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 30 Dicembre 2014, 13:42:13
Uhm! Penso proprio che mi ero espresso male, applicando l'istruzione ListBox1[1].Selected = True in questa struttura:

Codice: gambas [Seleziona]

Repeat
    If n_mese < 10 Then
      rif_mese$ = "0" & n_mese
    Else
      rif_mese$ = n_mese
    Endif
    name$ = "DDT" & codice$ & "@" & rif_mese$
    test_file = Exist(_base & name$ & ".dbl")
    If test_file = True
      ListBoxMesi[n_mese].Selected = True  
    Endif
    n_mese = n_mese + 1
  Until n_mese > 12


si ottiene che ad essere selezionato è solo l'ultimo item che soddisfa il test, mentre dovrei poter fare un highlight di tutti gli item che soddisfano la condizione.

Probabilmente eseguendo una selezione viene automaticamente deselezionata quella precedente, beh, mi metterò alla ricerca di una proprietà che possa soddisfare la mia necessità
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 30 Dicembre 2014, 15:59:15
Quindi tu desideri dare un colore (o in questo caso una evidenziazione) per ciascun mese ?
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 30 Dicembre 2014, 16:14:35
Probabilmente la selezione non funziona bene perché occorre prima puntare l'indice della ListBox sulla riga interessata:
Codice: [Seleziona]
 ListBoxMesi[n_mese].Index=  iInd
:ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 30 Dicembre 2014, 18:23:30
Ciao a tutti

Quindi tu desideri dare un colore (o in questo caso una evidenziazione) per ciascun mese ?

Si, per ciascun mese che sodddisfa la condizione:
Codice: gambas [Seleziona]

    test_file = Exist(_base & name$ & ".dbl")
    If test_file = True

nello specifico per i mesi che hanno hanno il file presente, con più precisione quelli in cui è stato emesso almeno un D.D.T.

Per quanto riguarda l'amico Picavbg: il codice che mi hai suggerito:
Codice: gambas [Seleziona]

ListBoxMesi[n_mese].Index = iInd

stranamente mi da errore:
Codice: [Seleziona]
Unknown identifier: iInd
ho anche provato a togliere la i iniziale ma il risultato non cambia.

Aggiunta dell'ultimo minuto: ho anche provato a sostituire iInd con n_mese, ma ottengo un ulteriore errore, più precisamente:
Codice: [Seleziona]
Unknown symbol 'index' in class '_ListBox_Item' 

Grazie comunque
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 30 Dicembre 2014, 19:32:02
Codice: gambas [Seleziona]

ListBoxMesi[n_mese].Index = iInd

stranamente mi da errore:
Codice: [Seleziona]
Unknown identifier: iInd


...perché non lo hai dichiarato: iInd che cosa è ?




Codice: [Seleziona]
Unknown symbol 'index' in class '_ListBox_Item' 


L'errore viene sollevato, poiché .Index non esiste come proprietà di ListBox[n] (contempla solo: .Selected e .Text )
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 31 Dicembre 2014, 00:09:54
L'errore viene sollevato, poiché .Index non esiste come proprietà di ListBox[n]

Veramente dando F1 dall'Ide di Gambas -> Componenti 3.0 -> Qt4 -> ListBox si ottiene l'elenco delle proprietà, dei metodi e degli eventi legati alla ListBox e nel gruppo delle proprietà elencato in basso a sinistra la proprietà Index esiste ed io l'ho anche usata.
Secondo me era la variabile iInd che io avevo copiato erroneamente da un mio programma ad avere creato problemi a Franco.
Franco, scusami se non volendo ti ho suggerito una variabile non tua.  Puoi riprovare utilizzando naturalmente le tue variabili:
Codice: [Seleziona]
n_mese = ListBoxMesi.Index   ' e successivamente
ListBoxMesi[n_mese].Selected = True 

oppure

Codice: [Seleziona]
n_mese = ListBoxMesi.Current.Key   ' e successivamente
ListBoxMesi[n_mese].Selected = True 

Io ho utilizzato entrambi le proprietà ed il mio programma non produce errori.
Fammi sapere.
 :ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 31 Dicembre 2014, 00:19:53

Veramente dando F1 dall'Ide di Gambas -> Componenti 3.0 -> Qt4 -> ListBox si ottiene l'elenco delle proprietà, dei metodi e degli eventi legati alla ListBox e nel gruppo delle proprietà elencato in basso a sinistra la proprietà Index esiste ed io l'ho anche usata.


Non hai letto con attenzione quello che ho scritto.

Dunque....

questo:
Codice: gambas [Seleziona]
ListBoxMesi.Index = 

esiste.

Questo:
Codice: gambas [Seleziona]
ListBoxMesi[n_mese].Index = 

non esiste.
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 31 Dicembre 2014, 00:23:22
@ Franco

Mi permetto di darti un consiglio: quando ho cominciato a programmare in Gambas anch'io usavo i trattini "_" all'interno dei nomi delle variabili, poi mi sono accorto che per Gambas detti trattini hanno significati  ed utilizzi particolari, per cui ho fatto marcia indietro ed ora evito di usare nomi del tipo "x_nome_cognome", meglio "XNomeCognome".
 :ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 31 Dicembre 2014, 00:27:42
Non hai letto con attenzione quello che ho scritto.

Hai ragione, scusa.
 :-[
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 31 Dicembre 2014, 15:08:25
@Picavbg

In effetti avevo anch'io pensato a questa eventualità ed avevo perciò provato a sostituire la tua variabile con la mia n_mese ricevendo di rimando l'errore che ho riportato nel precedente mio post.

ma fatemi capire un attimo ???: Mi state suggerendo di inserire le due righe dell'amico Picavbg nel mio listato che riporto sotto
Codice: gambas [Seleziona]

    Repeat  
       If n_mese < 10 Then  
         rif_mese$ = "0" & n_mese  
       Else  
         rif_mese$ = n_mese  
       Endif  
       name$ = "DDT" & codice$ & "@" & rif_mese$  
       test_file = Exist(_base & name$ & ".dbl")  
       If test_file = True  
         ListBoxMesi[n_mese].Selected = True    
       Endif  
       n_mese = n_mese + 1  
     Until n_mese > 12  

ora n_mese viene determinato dal controllo sul file
Codice: [Seleziona]
test_file = Exist(_base & name$ & ".dbl")
    If test_file = True  
se il mese in esame possiede un file registrato il rispettivo mese nella ListBox si evidenzia, l'unico problema che ho riscontrato è che evidenziando un mese viengono de-evidenziati quelli precedenti, ora a quanto capisco dovrei modificare il controllo in questo modo
Codice: gambas [Seleziona]

       If test_file = True  
         n_mese = ListBoxMesi.Index
         ListBoxMesi[n_mese].Selected = True    
       Endif  

in questo caso però comprometterei il controllo perchè la variabile n_mese verrebbe sovrascritta dal valore di ListBoxMesi.index e mi bloccherebbe del tutto il ciclio Repeat, a meno che l'istruzione inserita non serva solo a non lasciar deselezionare  i vari item, al che mi basterebbe scaricare il valore in una variabile fittizia, come uso io buffer$ ed il gioco sarebbe fatto.
Che ne dite?

@Picavbg

le variabili con il trattino sono una reminiscenza del vecchio programma ove il sottolinea non aveva nessuna valore, potrei quindi traformare le variabili in questo modo..... n_mese ===> nMese.

Grazie a tutti.

Se non inserisco altri post..... auguri di buon capodanno a tutti.
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 31 Dicembre 2014, 15:36:43
...fai prima a cambiare oggetto.  ;D
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 31 Dicembre 2014, 19:16:29
ora a quanto capisco dovrei modificare il controllo in questo modo
Codice: gambas [Seleziona]

       If test_file = True  
         n_mese = ListBoxMesi.Index
         ListBoxMesi[n_mese].Selected = True    
       Endif  

in questo caso però comprometterei il controllo perchè la variabile n_mese verrebbe sovrascritta dal valore di ListBoxMesi.index e mi bloccherebbe del tutto il ciclio Repeat

Certo, hai ragione. l'istruizione corretta é
Codice: [Seleziona]
ListBoxMesi.Index = n_mese

Tieni conto che nella ListBox puoi selezionare una sola riga alla volta oppure tutte le righe.

Ciao e Buon anno.
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 01 Gennaio 2015, 14:23:01
Rieccomi, sta scritto: "chi fa un azione al primo dell'anno la ripete tutto l'anno" che tradotto diventa: chi programma al primo dell'anno programma tutto l'anno.

@ Picavbg

ho provato ad inserire l'istruzione ListBoxMesi.Index = n_mese e non provoca problemi di sorta, ma non influisce in alcun modo sul comportamento della ListBoxMesi, in poche parole resta solo evidenziato l'ultimo item esaminato che ha superato la condizione:
Codice: gambas [Seleziona]

test_file = Exist(_base & name$ & ".dbl")
    If test_file = True

d'altronde nell'ultimo tuo post mi scrivevi:
Citazione
Tieni conto che nella ListBox puoi selezionare una sola riga alla volta oppure tutte le righe.
ciò vuol dire che l'oggetto ListBox non può supportare ciò che intendo realizzare? a questo punto ciò che mi postava l'amico Vuott
Citazione
...fai prima a cambiare oggetto.
ha un senso molto preciso, ma qual'è l'oggetto giusto da usare?

Ad occhio sull'editor di form vedo la TextArea e dall'help ho visto che supporta la proprietà Selected, quindi è pensabile che supporti un simile costrutto?
Codice: [Seleziona]
index=TextArea.Selected

E poi cosa molto più importante, è in grado di supportare l'esigenza che vi ho illustrato?

Buon anno a tutti.
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 01 Gennaio 2015, 17:21:00

Ad occhio sull'editor di form vedo la TextArea

E poi cosa molto più importante, è in grado di supportare l'esigenza che vi ho illustrato?


Io utilizzerei una GridView.   (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/whistling.gif)
Titolo: Re: Utilizzo di una ListBox
Inserito da: andy60 - 01 Gennaio 2015, 22:31:43
Per inserire una lista dei mesi ho usato una ListBox, ma sto pensando di non aver usato la struttura adatta.

In poche parole i vari mesi dovrebbero assumere una particolare colorazione se esiste o meno del file relativo al mese stesso, il problema e che ho trovato il modo per imporre il colore di background, ma ciò avviene per tutta la lista e non trovo il comando per imporlo ad un solo elemento della stessa.

Esiste il comando adatto per la ListBox o veramente devo usare un'altra struttura e quale?

A proposito:
:ot: ho notato che richiedendo l'anteprima del post non si ottiene nulla, è un problema del mio sistema o c'è qualcosa che non va nella struttura del forum? :ot:

Grazie e ciao a tutti!

potresti fare una listbox con un campo text collegato: il campo text ripete la selezione del listbox e compie una certa routine, ad esempio cerca un file o un campo....a seconda del risultato viene colorato in modo diverso..io il listbox lo lascerei così anche che' non mi risulta che ci sia una proprietà come quella..
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 01 Gennaio 2015, 23:00:02
Io utilizzerei una GridView.   (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/whistling.gif)
Convengo con questa soluzione. Naturalmente la colorazione dello sfondo di ciascuna cella della singola riga dovrà essere curata direttamente dal codice e dovrà essere diversa per ciascuna delle righe da evidenziare. :ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 01 Gennaio 2015, 23:09:41
...ricordando anche che la GridView supporta, volendo, pure il protocollo HTML !   (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/asd.gif)
Titolo: Re: Utilizzo di una ListBox
Inserito da: andy60 - 02 Gennaio 2015, 00:25:06
 ;D secondo me il software deve fare il suo lavoro e bene, inutile andare a fossilizzarsi su un cavillo di colore, quello che conta è il lavoro che fa in generale, naturalmente è la mia visione :-[ :-\ :'(
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 02 Gennaio 2015, 01:32:32
secondo me il software deve fare il suo lavoro e bene, inutile andare a fossilizzarsi su un cavillo di colore, quello che conta è il lavoro che fa in generale...

Sostanzialmente questa opinione è condivisibile. Va però anche detto che - quando è possibile - è errato astenersi dal risolvere un problema: la soluzione apporterebbe maggiore conoscenza proprio sulla programmazione.
Titolo: Re: Utilizzo di una ListBox
Inserito da: andy60 - 02 Gennaio 2015, 12:05:04
secondo me il software deve fare il suo lavoro e bene, inutile andare a fossilizzarsi su un cavillo di colore, quello che conta è il lavoro che fa in generale...

Sostanzialmente questa opinione è condivisibile. Va però anche detto che - quando è possibile - è errato astenersi dal risolvere un problema: la soluzione apporterebbe maggiore conoscenza proprio sulla programmazione.

delegare ad un textbox o/label colori e informazioni aggiuntive secondo me risolve tanti problemi, i campi colorati in una list box non sono neanche bellissimi, i campi colorati li ho usati in myzone con la componente grid, la vanno alla grande, ma è una griglia
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 02 Gennaio 2015, 23:34:24
Volendo mantenere la struttura ListBox, una soluzione potrebbe essere quella di creane 2, la prima per quelle meritevoli di selezione, la seconda per tutte le altre.
É un'idea, ma se ne potrebbero escogitare anche altre, secondo la propria utilità e fantasia.
 :D
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 05 Gennaio 2015, 21:59:15
potresti fare una listbox con un campo text collegato: il campo text ripete la selezione del listbox e compie una certa routine, ad esempio cerca un file o un campo....a seconda del risultato viene colorato in modo diverso..io il listbox lo lascerei così anche che' non mi risulta che ci sia una proprietà come quella..

Qui mi metti già in crisi Andy60, come è possibile realizzare una listbox collegata con un campo text? Puoi spiegarmelo?

Io utilizzerei una GridView.   (http://levipere.com/wp-content/plugins/smilies-themer/Axendr/whistling.gif)

Non sarebbe un problema descrivere una GridView, l'unica cosa che mi chiedo è se è possibile eseguire una selezione su questo tipo di struttura?

Vi ringrazio tutti e continuo nella programmazione che comunque sta procedendo (Anche meglio di quanto credevo).

Ciao a tutti!
Titolo: Re: Utilizzo di una ListBox
Inserito da: Picavbg - 05 Gennaio 2015, 23:43:29
mi chiedo è se è possibile eseguire una selezione su questo tipo di struttura

Se tu guardi fra le proprietà di una Gridview trovi la proprietà Mode che, posta a  Multiple, ti permette di selezionare 2 o più righe. Nel tuo caso dovresti attivare detta proprietà già in fase di dichiarazione della gridview, oppure da codice, durante l'impostazione del formato delle righe e delle colonne. La selezione delle righe che ti interessano invece dovrai farla esclusivamente da codice, durante il trattamento dei dati ricadenti nella casualità dell'evidenziazione.
Io non l'ho ancora usata, ma dovrebbe essere semplice da mettere in pratica. Facci sapere.
 :ciao:
Titolo: Re: Utilizzo di una ListBox
Inserito da: vuott - 05 Gennaio 2015, 23:46:44
... l'unica cosa che mi chiedo è se è possibile eseguire una selezione su questo tipo di struttura?

Io riprendo la tua domanda ed esigenza originarie:


In poche parole i vari mesi dovrebbero assumere una particolare colorazione se esiste o meno del file relativo al mese stesso, il problema e che ho trovato il modo per imporre il colore di background, ma ciò avviene per tutta la lista e non trovo il comando per imporlo ad un solo elemento della stessa.


e per esse ti rinvio a questa pagina attinente all'oggetto GridView, dalla quale credo potrai estrapolare alcuni spunti ed informazioni utili:
http://www.gambas-it.org/wiki/index.php?title=Cambiare_il_colore_di_fondo_di_una_riga_cliccata_e_far_tornare_quello_di_un%27altra_al_colore_iniziale
Titolo: Re: Utilizzo di una ListBox
Inserito da: Franco_da_vc - 06 Gennaio 2015, 15:48:46
Missione compiuta! :D

Finalmente la lista dei mesi si comporta come avevo progettato io, ora compaioni i mesi presenti in rosso ed il mese in corso in verde. In questo modo graficamente ho l'informazione di quali mesi contengono Ddt per ogni singolo cliente, se selezionato, ed in una seconda gridView il numero dei Ddt emessi e le rispettive date di emissione :yeah:

Voi direte: "Ma se leggevi prima il wiki non sarebbe stato meglio?"; beh  :-[ il problema è stato che io identificavo il wiki con l'help in linea dell'ide e non ero mai andato sul sito principale a vedere cos'era veramente.

Ora penso di prendermi una piccola pausa nella programmazione ed inizierò a leggermi il wiki, intanto ringrazio tutti coloro che mi hanno profuso i vari suggerimenti e vado a mettere il famoso Risolto al titolo del post! :ok:

Ci risentiremo a presto.
Titolo: Re:[Risolto] Utilizzo di una ListBox
Inserito da: Golia - 01 Giugno 2016, 21:58:54
Ciao riapro questo post perchè mi serviva una cosa del genere.

Ho copiato la classe Listbox e ho modificato qualcosa, allego un'esempio con delle prove.
Se a qualcuno interessa poi mi fa sapere se può funzionare

Ciao  :2birre:
Titolo: Re:[Risolto] Utilizzo di una ListBox
Inserito da: Gianluigi - 04 Giugno 2016, 21:08:53
Ciao Golia,
 :2birre: lavoro interessante anche se avresti potuto commentarlo un pochino.  ;D
Io sincronizzerei il numero che appare nella textbox1 con quello della griglia.

Comunque è bene precisare che la ListBox ha la proprietà mode che permette di ottenere, se ho capito bene, quanto voleva a suo tempo Franco da Vercelli:
Codice: [Seleziona]
Public Sub Form_Open()  
 
  ListBox1.Add("Gennaio")
  ListBox1.Add("Febbraio")
  ListBox1.Add("Marzo")
  ListBox1.Add("Aprile")
  ListBox1.Add("Maggio")
  ListBox1.Add("Giugno")
  ListBox1.Add("Luglio")
  ListBox1.Add("Agosto")
  ListBox1.Add("Settembre")
  ListBox1.Add("Ottobre")
  ListBox1.Add("Novembre")
  ListBox1.Add("Dicembre")
  ' imposta mode a multiple
  ListBox1.Mode = 2
  ListBox1[2].Selected = True
  ListBox1[4].Selected = True
  ListBox1[8].Selected = True
  ListBox1[10].Selected = True 

End
:ciao:
Titolo: Re:[Risolto] Utilizzo di una ListBox
Inserito da: Golia - 04 Giugno 2016, 23:39:19
Ciao
Si hai ragione che non commento.. ;D
Comunque è un pò diverso, così selezioni le righe interessate che però al primo click sparisce la selezione, forse era quello che serviva a Franco.
Quello che serviva a me è che restano selezionate, inoltre scelgo il colore e altre proprietà. Le scrivo sotto visto che non ho commentato:

N.B. Le proprietà si possono impostare direttamente dalla lista proprietà a dx.

1: ColorRowAltern -- imposta colore per righe alternate (l'altro colore è impostato dal normale Bachground
2: ColorRowMod -- Imposta colore della righe selezionate
3: Numbering -- come gridview (Listbox è una gridview) le righe sono numerate  -- true o false
4: Grid -- disegna la griglia in ogni riga  -- true o false

per impostare le righe da selezionare:

Citazione
MyList1.ModRow = [1, 5, 6]