Newsgroup: it.comp.lang.visual-basic
Titolo: istruzioni ogni tot istanti

Salve,
ho un form che contiene dei campi per una fattura. Avrei necessita' di
eseguire delle istruzioni che andranno ad aggiornare i campi prezzo,
importo, imponibile, e totale fattura in base al contenuto dei campi
quantita', iva e prezzo, ogni 0,5 secondi.
Mi date qualche suggerimento? Come faccio ad eseguire del codice ogni 0,5
secondi?
Grazie.

 ha scritto nel messaggio
news:pan.2004.09.20....@nonono.no...


 quantita', iva e prezzo, ogni 0,5 secondi.
Aggiornare un listino ogni mezzo secondo?
Non pensavo che l'inflazione fosse giunta a questi livelli...;-)))
Scherzi a parte, la cosa mi sembra alquanto assurda, e fonte di 
possibili problemi (sicuro che l'interrogazione al database e relativo 
aggiornamento dei controlli video siano sufficientemente veloci? Sicuro 
che, se anche fosse rapido, questo refresh 2 volte al secondo non possa 
risultare fastidioso per l'operatore e/o rendergli impossibile l'uso del 
programma?)
Prova a spiegare meglio l'esigenza che hai, magari si trova una 
soluzione piu' elegante del timer che parte ogni 500 millisecondi.
-- 
Ciao!
    -DocDoc-
--- Per scrivermi: docdoc()
sertel.net
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE!     
http://www.spamterminator.it/

>quantita', iva e prezzo, ogni 0,5 secondi.
Scusa, non avevo letto bene la frase, mi era sfuggito "per una fattura": 
se ho capito cosa intendi fare, non hai bisogno di aggiornare i campi 
ogni mezzo secondo (anzi, non devi;-)) ma piu' semplicemente gestisci il 
tutto nell'evento "Change" di articolo e quantita': quando sono tutti e 
due diversi da stringa nulla allora fai l'interrogazione al DB, estrai i 
valori corrispondenti all'articolo selezionato, quindi calcoli tutti i 
totali e finisci l'esecuzione.
E' questo che intendevi?


 E' questo che intendevi?
Esattamente, pero' i campi quantita' e prezzo sono in tutto 14 texbox,
dovrei praticamente gestire l'evento "change" per tutte e 14 le texbox e
mi sembrava "sporcare" un po' il codice, anche in previsione di possibili
future modifiche (es: aggiunta o eliminazione di campi nella fattura).
Non so se mi sono spiegato. Anche se in effetti rispetto alla soluzione di
aggiornare i campi ogni tot millisecondi sprecherei molte meno risorse.

 dovrei praticamente gestire l'evento "change" per tutte e 14 le texbox 
Ossia mi di che la form della fattura e' composta da 14 righe, immagino, 
giusto?
Scusa, ma allora perche' non hai fatto un array di textbox? In questo 
modo l'evento Change e' unico (quanto meno per colonna) e te la giochi 
con l'"Index" per distinguere la riga modificata ed aggiornare di 
conseguenza i valori presenti nella stessa riga...
Se non l'hai fatto, io ti consiglio di fare cosi, ci perderai una 
mezz'ora a rimettere tutti i controlli sotto forma di array ma alla fine 
avrai una form nella quale non solo potrai gestire molto piu' 
comodamente eventi e verifiche, ma potrai addirittura rendere 
parametrico il numero di righe della fattura...


 conseguenza i valori presenti nella stessa riga... 
Ho qualche problema a creare un array di textbox, sono praticamente un
newbie, qualche suggerimento? Sulla guida non sono riuscito a trovare
nulla.
Grazie.

 nulla.
Diciamo allora che i tuoi 3 textbox (per  IVA, quantita' e prezzo) si 
chiamano "txtIVA", "txtQT" e "txtPrezzo", e che l'importo sia la label 
"lblPrezzo". Crei la prima riga di controlli, poi a TUTTI inserisci il 
valore "0" nella proprieta' "Index", quindi selezioni la riga di 
controlli, e con copia/incolla crei le altre (quante ne ne pare), 
ovviamente posizionandole opportunamente. Quando fai il primo "incolla", 
il VB, vedendo che il controllo ha un index, capisce che vuoi creare un 
array ed automaticamente incrementa la propery "Index" che quindi varra' 
1 (poi 2, 3 eccetera). Nel codice dell'applicazione avrai quindi UN solo 
evento per ogni tipologia di controllo, ma con un parametro, Index, che 
ti dice quale controllo dell'array e' coinvolto. Ad esempio:
Sub txtIVA_Change(Index As Integer)
    CalcolaTotale Index
End Sub
A questo punto metti questa sub CalcolaTotale in tutti i controlli, e 
scrivi la sub piu' o meno in questo modo (ovviamente ho scritto "di 
getto" il codice, quindi devi controllarlo, adattarlo ed ampliarlo per 
conto tuo ad es. per fare la validazione dei dati prima di calcolare il 
totale, cosi' come per le opportune conversioni da testo a valori 
numerici/valuta che qui per semplicita' ho usato banalmente con CCur, 
Val eccetera):
Sub CalcolaTotale(Index As Integer)
     If txtIVA(Index)<>"" And txtQT(Index)<>"" And txtPrezzo(Index)<>"" Then
	lblImporto(Index) = Format(CCur(txtPrezzo) * Val(txtQT) *  (1 + 
Val(txtIVA)), "###,##0.00")
     Else
         lblImporto(Index) = ""
     End If
     TotaleFattura
End Sub
Inserisci anche la sub per calcolare il totale fattura (che metterai 
nella label "lblTotaleFattura"):
Sub TotaleFattura()
     Dim i As Integer
     Dim Totale As Currency
     Totale = 0
     For i = 0 To 6	' Numero di righe
         If lblImporto <> "" Then Totale =Totale + CCur(lblImporto)
     Next i
     lblTotaleFattura = Format(Totale, "###,##0.00")
End Sub
Come vedi in questo modo non ci sono timer, e tutto viene gestito (come 
normalmente va fatto, se possibile) tramite i normali eventi VB.
Spero che possa essere un valido spunto.


 possa essere un valido spunto.
E' un ottimo spunto, soprattutto per imparare cose nuove ed affinare nuove
tecniche. Ti ringrazio molto.
Ciao.