Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] problema con sub con parametri
Forum - C# / VB.NET - [VB.NET] problema con sub con parametri

Avatar
Lafa_96 (Normal User)
Pro


Messaggi: 111
Iscritto: 09/03/2011

Segnala al moderatore
Postato alle 20:00
Giovedì, 12/05/2011
allora ho creato una sub con 4 parametri che poi dovrà essere inserita in un timer

il codice della sub è questo
Codice sorgente - presumibilmente VB.NET

  1. Private Sub progresso(ByVal m As Integer, ByVal c As Integer, ByVal v As Integer, ByVal d As Integer)
  2.         m = d
  3.         calcolo = m - (m - c)
  4.         v = calcolo
  5.     End Sub



e poi nel timer
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.         progresso(ProgressBar1.Maximum, audio.CurrentPosition, ProgressBar1.Value, audio.Duration)
  3.     End Sub



visto che non uso molto le sub con parametri qualcuno mi dice perchè il timer non fa quello che dovrebbe fare?
ah si, controllo è una variabile integer e "progresso" dovrebbe aggiornare continuamente la progressbar che indica lo stato della traccia in esecuzione!


Non hai bisogno di vedere l’intera scalinata. Inizia semplicemente a salire il primo gradino. (Martin Luther King)
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
2
Down
V
Segnala al moderatore
Postato alle 23:34
Giovedì, 12/05/2011
tu ti confondi...
Credo che tu debba usare al posto di ByVal un parametro ByRef in questo modo non crei una seconda variabile con una diversa allocazione di memoria; ma, detto banalmente, sostituisci il nome della variabile passata in ingresso solo per la durata della subroutine ed eventuali valori che vai a scrivere in m ed in v sostituiscono il valore dei parametri passati in input:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub progresso(ByRef m As Integer, ByVal c As Integer, ByRef v As Integer, ByVal d As Integer)
  2.               m = d
  3.               calcolo = m - (m - c)
  4.               v = calcolo
  5.           End Sub




Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 17:50
Venerdì, 13/05/2011
ByRef non funzionerà. Infatti richiamare progressBar1.Value equivale a chiamare la funzione nascosta progressbar1.get_Value(), creata al momento della compilazione. Usando ByRef sul primo parametro stai passando per riferimento il risultato restituito dalla funzione, che è un valore temporaneo, cambiando il quale non influenzi in nessun modo il valore di Value.

La funzione scritta così non ha senso. Devi assegnare il valore direttamente alla proprietà. Ma dove hai imparato a scrivere funzioni del genere?

emh non ho idea del perchè ma settando tutti i parametri con ByRef la cosa funziona...comunque mi rendo perfettamente conto che questo codice è a dir poco terrificante, ma visto che mi servirà poi da applicare la bellezza di 10 volte(se non di più) e con diversi parametri, mi era più comodo così - Lafa_96 - 13/05/11 18:01
ok ho parlato troppo presto, non funge, mi tocca riscrivere la stessa cosa 10 volte...grazie dell'aiuto comunque - Lafa_96 - 13/05/11 18:03
ok ora funzione c'era un ByRef di troppo! grazie walker e grazie della lezioncina totem! - Lafa_96 - 13/05/11 18:20


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 20:48
Giovedì, 12/05/2011
sinceramente non ho ben capito cosa vorresti fare.. comunque dall'ultima tua frase '"progresso" dovrebbe aggiornare continuamente la progressbar che indica lo stato della traccia in esecuzione!' penso di capire che tu vorresti aggiornare la progressbar. ma come speri che questo avvenga se nella sub progresso non imposti il nuovo valore che essa deve assumere??

PM
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:51
Giovedì, 12/05/2011
Innanzitutto perché la Sub (come uso dire io) è fine a se stessa, poi sono cieco io o manca il ProgressBar1.Value = .. che dovrebbe aggiornare lo stato della ProgressBar?


Volere è potere.

Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
1
Down
V
Segnala al moderatore
Postato alle 21:32
Giovedì, 12/05/2011
La prima Sub è totalmente priva di senso :om:
Ma sul serio, non ho mai visto una cosa così stupida (senza offesa!)

Esatto, senza aggiornare la properità Value la barra non si muove :_doubt:

Allora per voi 3 che avete postato qui sopra, non sarò un programmatore esperto e di certo non mi metto neanche lontanamente al vostro livello viste le applicazioni che avete creato (gli ho dato un occhio), ma io codici a muzzo non ne posto, se voi leggeste i 2 codici che ho postato, nel secondo... - Lafa_96 - 13/05/11 17:52
...c'è scritto progresso(ProgressBar1.Maximum, audio.CurrentPosition, PROGRESSBAR1.VALUE, audio.Duration) e la proprietà scritta in maiuscolo equivale alla v che nel primo codice è settata così v=calcolo, quindi non dite cavolate... - Lafa_96 - 13/05/11 17:55
ok vi chiedo scusa per la boiata che ho scritto, mi rendo conto che fa veramente schifo, mi dispiace di avervi fatto perdere tempo! spero che la mia prossima domanda abbia un senso logico! - Lafa_96 - 13/05/11 21:37
PM