Gambas-it

Gambas3 => Segnalazione bug => Topic aperto da: dregi - 17 Settembre 2019, 14:43:25

Titolo: su Wiki
Inserito da: dregi - 17 Settembre 2019, 14:43:25
Suggerirei di controllare il codice presente a questa pagina di Wiki: https://www.gambas-it.org/wiki/index.php?title=Assegnare_colori_allo_sfondo_ed_al_testo_di_una_riga_selezionata_di_una_ListView

Ho provato il codice che secondo me contiene un errore
Codice: [Seleziona]
ListView1[j + 1]
ListView1[ob.Row + 1]
da entrambi va tolto il +1
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 14:50:03
Devi spiegare anche il perché, altrimenti non si capisce la segnalazione.



Titolo: Re:su Wiki
Inserito da: dregi - 17 Settembre 2019, 15:03:55
beh, inanzitutto perchè l'ho provato  :D  Comunque l'errore viene generato perchè va oltre l' Ubound (ob.Rows.Max) ?
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 15:30:05
E' strano...  a me non dà alcun errore e funziona perfettamente.

Inoltre non comprendo come la Proprietà .Max dell'array contenente tutte le righe del "Figlio", che è una GridView, della ListView possa causare in quel caso un errore di "Out of bound".
Infatti le righe del ".Children" (la GridView) della ListView costituiscono anche le righe della ListView medesima. Infatti le righe della ListView sono sette, e il valore restituito da "ob.Rows.Max" è coerentemente 6 ("ob" è una variabile di tipo Object che in questo caso punta alla GridView "Figlia" della ListView).
Per verificare ciò è sufficiente porre un "Print" dopo la riga "ob = ListView1.Children[0]":
Codice: [Seleziona]
Print ob.Rows.Max

Va detto, invero, che, a voler essere precisi, un errore c'è nelle due parti di codice, da te segnalate, ed è l'assenza della funzione di conversione da valore numerico a valore ASCII stringa. Infatti il tipo di valore richiesto, da inserire nelle parentesi quadre, è di tipo Stringa, essendo l'identificativo della chiave distintiva e non il numero di Indice dell'array ! A causa dell'automatismo di conversione fra tipi (che io non condivido), operato da Gambas, l'errore in tal caso viene prevenuto e così evitato.
Volendo comunque, come dicevo, essere precisi, le due parti andranno così rettificate:
Codice: [Seleziona]
ListView1[CStr(j + 1)].Richtext = ...etc...

Codice: [Seleziona]
ListView1[CStr(ob.Row + 1)].Richtext = ...etc...
Provvedo ora alla suddetta modifica nella pagina della WIKI.
Titolo: Re:su Wiki
Inserito da: Gianluigi - 17 Settembre 2019, 15:46:20
Va precisato che il codice funziona solo usando le librerie Grafiche QT (gb.gui.qt) altrimenti dà errore.
Suggerisco di evidenziarlo bene.

 :ciao:
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 15:48:56
Va precisato che il codice funziona solo usando le librerie Grafiche QT (gb.gui.qt) altrimenti dà errore.
Suggerisco di evidenziarlo bene.
Ah, ecco, questa segnalazione è utile.
Il fatto è che io in grafica opero sempre in ambiente QT !
Grazie Gianluigi, provvedo subito nella WIKI.

Va comunque ringraziato anche dregi: senza la sua segnalazione non si sarebbero potute apportare queste tre precisazioni.
Titolo: Re:su Wiki
Inserito da: Gianluigi - 17 Settembre 2019, 17:08:05
Propongo un codice estrapolato da seHelpBuilder per cambiare i colori a una ListView che dovrebbe funzionare con qualunque libreria grafica.
Vedi progetto allegato.

 :ciao:

Piccola dimenticanza corretta, spero che funzioni bene.
Titolo: Re:su Wiki
Inserito da: Gianluigi - 17 Settembre 2019, 17:41:52
Io con le GTK ottengo un malfunzionamento in questo codice:
Codice: [Seleziona]
txtIndex.Select(Len(txtIndex.text) - 1, Len(txtIndex.text))
Mentre con le QT vengono selezionate le sole lettere non trovate con GTK non viene selezionato nulla, succede anche a voi?

 :ciao:
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 18:00:42
Sì, evidentemente la proprietà ".Foreground" alla ListView è stata aggiunta successivamente, magari su richiesta esplicita.
...però quei "Try " non si possono guardare !   :bad:
Titolo: Re:su Wiki
Inserito da: Gianluigi - 17 Settembre 2019, 18:07:41
Occorre già stare attenti a tante cose, nella programmazione!
Io il Try lo adoro  :-*
Un Try vi salverà la vita  :P
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 18:22:35
Un Try vi salverà la vita  :P

...non credo in questo caso !!!   

(https://i.makeagif.com/media/9-03-2016/0c4Dbr.gif)
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 18:37:44
Ad ogni modo ho inserito nella pagina della Wiki un nuovo codice, ripreso da quello del programma suggerito da Gianluigi, rivisto e ridotto.
Titolo: Re:su Wiki
Inserito da: Gianluigi - 17 Settembre 2019, 20:04:36
Un Try vi salverà la vita  :P
...non credo in questo caso !!!   

Perché non hai letto bene infatti dico vi e non mi  :P

Citazione
Ad ogni modo ho inserito nella pagina della Wiki un nuovo codice, ripreso da quello del programma suggerito da Gianluigi, rivisto e ridotto.
E poi dicono che i tirchi siano i genovesi...  :P :P
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 21:17:33
E poi dicono che i tirchi siano i genovesi...  :P :P

...e poi dicono che i Turchi sono Genovesi !

Titolo: Re:su Wiki
Inserito da: dregi - 17 Settembre 2019, 22:06:04
Vi ho letti e trovo il mondo Gambas sempre più affascinante! Oggi ho imparato che prima di muovere commenti occorre anche guardare con che libreria si sta lavorando..... e per un ciclo For non me lo sarei aspettato. Volevo ringraziare Gianluigi per il "nuovo" codice di evidenziazione della row, molto chiaro e sopratutto conciso, limpido e funzionante!

Per quanto riguarda quella pagina di Wiki, mi permetto di suggerire a vuott l'aggiunta di una riga per il clic su una voce della listView, lo so che è quasi scontato, ma se è una guida è una guida e ti deve menar per ditino....perchè sia di immediata comprensione l'uso anche al neofita....come me:
Codice: [Seleziona]
Dim s As String
  s = ListStampanti.Current.Text
Titolo: Re:su Wiki
Inserito da: vuott - 17 Settembre 2019, 23:21:09
... mi permetto di suggerire a vuott l'aggiunta di una riga per il clic su una voce della listView...
 
Codice: [Seleziona]
Dim s As String
  s = ListStampanti.Current.Text
M'era venuta in mente anche a me, pertanto provvedo ad aggiungere questa riga di codice.