Autore Topic: Evento change in listbox  (Letto 3202 volte)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Evento change in listbox
« il: 18 Luglio 2010, 09:44:07 »
Come da titolo avrei bisogno di generare un evento ogni volta che avviene un cambiamento in una list box, togliendo o aggiungendo un item
purtrobbo la listbox non prevede l'evento change
Come posso fare?

Grazie

"e il naufragar m'è dolce in questo mar"

Offline ealmuno

  • Maestro Gambero
  • ****
  • Post: 388
    • Mostra profilo
    • http://www.ealmuno.com
Re: Evento change in listbox
« Risposta #1 il: 18 Luglio 2010, 09:50:05 »
puoi usare click o select, cioè quando si clicca o si seleziona un elemento, oppure quando vai a inserire o eliminare un item non fai altro che richiamare l'evento
il mio nuovo sito : ealmuno.com

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Evento change in listbox
« Risposta #2 il: 18 Luglio 2010, 09:57:38 »
il problema è che l'inserimento del nuovo item viene effettuato da piu routine in  altre parte del programma, quindi non intervengo direttamente sul controllo
L'evento mi serve per ordinare ogni volta gli elementi della listbox stessa

 
"e il naufragar m'è dolce in questo mar"

Offline ealmuno

  • Maestro Gambero
  • ****
  • Post: 388
    • Mostra profilo
    • http://www.ealmuno.com
Re: Evento change in listbox
« Risposta #3 il: 18 Luglio 2010, 10:05:00 »
credo che sia l'unico metodo quello di richiamarlo, intanto basta una riga di codice.
il mio nuovo sito : ealmuno.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Evento change in listbox
« Risposta #4 il: 18 Luglio 2010, 10:07:09 »
Come da titolo avrei bisogno di generare un evento ogni volta che avviene un cambiamento in una list box, togliendo o aggiungendo un item
purtrobbo la listbox non prevede l'evento change
Come posso fare?
Grazie

Ritengo che tu ti riferisca all'intercettazione di un cambiamento automatico nella ListBox, comandato, probabilmente da programma al verificarsio di una certa condizione che, tuttavia, non é direttamente determinabile.
Io creerei una casella di testo con la proprietà visibile=False ed ogni volta che da programma aggiungerei, cancellerei o modificherei un riga dalla ListBox.List, andrei a scrivere un crt nella suddetta TestBox. Scatenerei così un evento change in quest'utima e dentro l'evento mi comporterei di conseguenza, secondo le necessità.  ;)

Ovviamente esistono tante altre soluzioni, ma l'importante é ottenere quello che si desidera.
 :( :(


:ciao:

Offline ealmuno

  • Maestro Gambero
  • ****
  • Post: 388
    • Mostra profilo
    • http://www.ealmuno.com
Re: Evento change in listbox
« Risposta #5 il: 18 Luglio 2010, 10:17:45 »
comunque dovrebbe agire sempre nel codice ed equivale alla soluzione da me proposta, solo che qui aggiungeresti una textarea.
il mio nuovo sito : ealmuno.com

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Evento change in listbox
« Risposta #6 il: 18 Luglio 2010, 10:24:29 »
ok chiaro
 essendo le routine dislocate in diversi punti del programma volevo evitare di scrivere più volte il richiamo alla routine di cambiamento
più che altro per evitare di dimenticare qualche cosa per la strada e non complicare ulteriormente il codice


Grazie per le risposte

"e il naufragar m'è dolce in questo mar"

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Evento change in listbox
« Risposta #7 il: 18 Luglio 2010, 12:36:24 »
ok chiaro
 essendo le routine dislocate in diversi punti del programma volevo evitare di scrivere più volte il richiamo alla routine di cambiamento
più che altro per evitare di dimenticare qualche cosa per la strada e non complicare ulteriormente il codice


Grazie per le risposte



Crea un modulo all'interno del quale scrivi una funzione pubblica che chiamerai Modifica. Al suo interno scrivi la routine di riordino della listbox e quando ti serve chiami una sola funzione che sostituisce tante righe di codice da copiare e incollare!

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Evento change in listbox
« Risposta #8 il: 18 Luglio 2010, 15:40:57 »
ListBox.List
puoi usare click o select, cioè quando si clicca o si seleziona un elemento, oppure quando vai a inserire o eliminare un item non fai altro che richiamare l'evento
Quando ho cominciato a scrivere la risposta la tua non era ancora arrivata, però, per quello che ricordo, non credo che gli eventi click e select, possano essere generati automaticamente, potrebbe eventualmente richiamarli con:
1) ListBox_Click() o ListBox_select() se la modifica viene eseguita dentro la stessa form della ListBox;
2) Formx.ListBox_Click() o Formx.ListBox_select() se la modifica viene eseguita fuori dalla  form della ListBox.
Non sono sicuro, ma il richiamo di una ListBox_select() potrebbe addirittura trasferire la riga selezionata nella ListBox.Text.

Poi, come ho detto nella mia prima risposta, esistono tante altre soluzioni, tutte ugualmente efficaci. Questo é il bello della programmazione. Infatti non sussiste la soluzione, ma esistono le soluzioni e, l'una vale l'altra, l'importante é non fare il giro del mondo per arrivare al bar dietro l'angolo.
 :) :)
Noi non sappiamo se
Citazione
le routine dislocate in diversi punti del programma
sono tutte dentro la form della ListBox o meno.

@Akrobaticone:
Potresti chiarirci in proposito e, soprattutto, per sommi capi, il lavoro che andresti a svolgere una volta intercettata la modifica della ListBox.List?

Personalmente sono convinto che una compilazione di richiesta di aiuto, concisamente dettagliata, possa rendere l'aiuto più rapido e mirato che non un'indicazione vaga nella quale, ognuno che voglia dare una mano, può interpretare quello che vuole, secondo la propria visibilità del problema.
Sbaglio ?  ;)
 :( :(
:ciao:

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Evento change in listbox
« Risposta #9 il: 18 Luglio 2010, 21:48:16 »
per essere più chiaro
ogni volta che inserisco un item nella listbox tutti i dati presenti devono essere riordinati con un criterio che stabilisco con una combobox

l'inserimento può avvenire in diverse parti del programma e per comodità e semplicità volevo evitare di chiamare la funzione di riordino in ogni routine che inserisce i dati
quindi, automaticamente ad ogni cambiamento a prescindere da dove esso avvenga, i dati si riordinano automaticamente secondo il criterio predefinito
tutte le routine tranne una sono all'interno della form della list box

non è indispensabile, ma poteva essere comodo.
in ogni caso definirò una funzione di riordino in un modulo e la chiamerò dalle varie posizioni ove avvengono gli inserimenti

a pensarci bene sono solo un po pigro......
"e il naufragar m'è dolce in questo mar"

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Evento change in listbox
« Risposta #10 il: 18 Luglio 2010, 22:38:56 »
Io non la vedo una questione di pigrizia :)

Al tuo posto se veramente in molteplici punti del mio programma devo fare il riordino ad ogni aggiunta alla listbox farei una piccola modifica al metodo ListBox.Add()
Creo una nuova classe:


Codice: gambas [Seleziona]
INHERITS ListBox
EVENT NewItem

PUBLIC SUB Add(Text AS String, OPTIONAL {Index} AS Integer = -1)

  SUPER.Add(Text, Index)
  RAISE NewItem

END


e dopo richiamo il mio componente:


Codice: gambas [Seleziona]
PUBLIC ListBox1 AS CListBox

PUBLIC SUB _new()

  ListBox1 = NEW CListBox(ME.Panel1) AS "ListBox1"

END


PUBLIC SUB Form_Open()



END

PUBLIC SUB Annulla_Click()

  ME.ListBox1.Add("Ciao")

END

PUBLIC SUB ListBox1_NewItem()
 
  Message("Hai aggiunto un nuovo elemento alla lista!")
 
END


In questo modo ogni volta che aggiungo un elemento alla lista va a scatenare l'evento NewItem

ti allego anche un esempio

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Evento change in listbox
« Risposta #11 il: 18 Luglio 2010, 23:15:56 »
Caspita, ci sono un bel po di spunti su cui ragionare 
sto imparando un sacco di cose nuove

provo a  scrivere qualche cosa con questo metodo e ti aggiorno sui risultati
Grazie
"e il naufragar m'è dolce in questo mar"

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Evento change in listbox
« Risposta #12 il: 18 Luglio 2010, 23:21:54 »
@ milio :
Codice: [Seleziona]
INHERITS ListBox  
EVENT NewItem  
Interessante. Potresti spiegare brevemente il meccanismo INHERITS e se vi siano altri casi pratici in cui convenga usarlo?
Ricordo di avere letto qualcosa su una guida quando ho cominciato ad approcciarmi con Gambas, ma, inutile dirti che non l'ho capito; questa potrebbe essere l'occasione per fare un salto di qualità conoscitiva.
Grazie anticipate. :)
:ciao:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Evento change in listbox
« Risposta #13 il: 18 Luglio 2010, 23:32:15 »
INHERITS scritto all'interno di una classe fa 'capire' all'interprete di gambas che quella classe e' inerente all'oggetto successivamente scritto dopo...

Cioe' se scrivo:

INHERITS ListBox

La mia classe eredita tutte le proprieta, metodi ed eventi dell'oggetto ListBox.
A questo punto, e qui viene il bello ;) , posso decidere di modificarne le proprieta'/metodi dell'oggetto andando semplicemente a dichiarare proprieta'/metodi con lo stesso nome delle proprieta'/metodi dell'oggetto 'originale'
Ovviamente posso anche dichiarare proprieta'/metodi nuovi e scatenare anche nuovi eventi (come nel caso del nostro amico Akrobaticone)

Non so se mi sono spiegato bene, ma comunque se ti scarichi l'esempio allegato capirai ;)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Evento change in listbox
« Risposta #14 il: 18 Luglio 2010, 23:39:51 »
scusa millio
ho aperto l'esempio che hai allegato e manca il Modulo1
è per caso quello dove dichiari con il metodo Inherits?
"e il naufragar m'è dolce in questo mar"