PDA

View Full Version : Delucidazioni in Visual Basic


GogetaSSJ
03-08-2004, 13:41
Ciao ragazzi, eccomi ancora qui con un sacco di curiosità :D
Arrivo subito al sodo.

Nel mio programma ho 2 form: il primo gestisce il programma vero e proprio mentre l'altro gestisce le opzioni (path di alcuni programmi ecc..)

Problema 1: Ho bisogno di leggere una determinata variabile presente nel form delle opzioni, nel form principale. Come faccio? (credo dovrei fare una sorta di condivisione)

Problema 2: Utilizzo la funzione Sleep per mettere in attesa il programmino, ma mi tiene occupata la cpu al 100% finchè non termina l'esecuzione (la quale può durare anche 5 o 10 minuti). Come faccio ad evitare questo?

Grazie a tutti ;)

matpez
03-08-2004, 19:41
Leggere le varibili da form ad un altro nn si può!!

Come mai ti serve proprio una varibile? Di solito una volta che il form opzioni si chiude nn dovresti più servirtene, altrimenti il programma è fatto male!

Per salvare le tue opzioni potresti usare un file ini, se ti interessa ti dico come si fa!

Se proprio devi utilizzare quella variabile, allora la devi dichiarare dentro un modulo in questa maniera: Public nome_var as tipo , così questa variabile sarà vista dall'inizio alla fine del tuo programma.

Se mi spieghi meglio perchè ti serve la variabile, magari troviamo una soluzione + attimale.

GogetaSSJ
03-08-2004, 20:07
Bè diciamo che ho risolto, prendendo quello che volevo tramite form.oggetto.proprietà (nella quale ci memorizzavo la variabile)

Ecco sapevo di risolvere con il modulo ma... non ne ho mai usati... come faccio?
Nella variabile deve andare settata una path, la quale deve essere letta dai 2 form.

Grazie ;)

matpez
03-08-2004, 20:14
Bhe nn ti conviene andare a leggere così, perchè altrimenti se chiudi il form con Unload Me, lui lo deve rifare il Load, ed alla fine ti carica sempre il form.. ma siccome nn lo chiudi, perchè tu hai preso solo un dato dall'altro form e nn hai premuto sulla X, il form ti rimane aperto in backgroud e nn si chiede bene il tuo programma!

Ti ho fatto un esempietto per il modulo :p

GogetaSSJ
03-08-2004, 20:18
Tra questo e l'altro thread ti sto facendo impazzire :D
Spero di non seccarti con la mia ignoranza, ora provo il tuo modulo, vediamo cosa ne esce fuori

Grazie ancora, molto disponibile!!!!

matpez
03-08-2004, 20:29
Ma va, quando nn sono in giro con amici o in giro con la tipa sono qui al pc :oink:

GogetaSSJ
03-08-2004, 20:46
Ho provato a fare ciò che ho capito (chissà che disastro :D)
In pratica ho spostato tutte le dim che avevo nel form delle opzioni, nel modulo (perchè il programma mi dava errori ovviamente)

Il tutto si avvia e funziona bene, ma arrivato al punto in cui deve eseguire:


Function avviabrowser()
leggini
Shell (ret)
End Function


Mi si pianta il programmino. In pratica in RET è memorizzata la path di firefox, la quale è presente in un file INI. Se monitorizzo la variabile, posso vedere che nel MODULO.BAS è settata correttamente la path, mentre in tutte le routine del form il valore è "" (vuoto)

Non deve andarselo a prendere da solo?

GogetaSSJ
03-08-2004, 20:57
COME NON DETTO!! :sofico:
Nel modulo avevo dichiarato la variabile RET con la funzione DIM, ora l'ho cambiato in public.

Ora nel modulo ci metto tutta quella roba condivisa tra i form, così lo ottimizzo per bene.
Grazie infinite!!!



Per il secondo problema invece? hai qualche idea?

matpez
03-08-2004, 21:17
Miraccomando nn spoastare tutte le varibili che nn condividi, altrimenti occupi memoria per nulla!!!

Per il secondo problema io di solito nn uso la sleep per grandi tempi.. creo un timer settato a 60000 (1 minuto), tengo una variabile che mi conta fino a 10, ogni volta che arriva a faccio eseguire quello che volevo e resetto la variabile... così si fa una contatore che stazione il programma per 10 minuti!!

Non è che lo ibernizza come con la sleep, ma lo mette in standby!

GogetaSSJ
03-08-2004, 22:52
Uhmmm ci proverò, credo di potercela fare, spero :rolleyes:

ho trovato un altro bugghino nel mio programma, in pratica se clicco sul pulsante ESCI, che ho impostando con il comando END, il programmino esce tranquillamente...
Se clicco sulla X in alto a destra, il programma scompare ma rimane in memoria nel taskmanager... che devo fare? :confused: :confused:

matpez
03-08-2004, 23:34
ASSOLUTAMENTE MAI UTILIZZARE IL COMANDO END

Metti sempre Unload Me per uscire... (nel tasto intendo)

Se il programma nn si chiude, è perchè c'è qlc che lo tiene in gioco, fai nu debug e controlla cosa nn si è chiuso bene, ma mai utilizzare l'END !!!!!

GogetaSSJ
03-08-2004, 23:42
Ok allora ci metto Unload Me al posto di end, per quanto riguarda il pulsante esci... però se chiudo dalla X rimane in memoria... Provo ad usare il debug, ma so usarlo a bassi livelli, cmq ce provo e vi dico ;)

Thx!

GogetaSSJ
03-08-2004, 23:44
Se faccio UNLOAD ME è peggio.. addirittura se faccio l'esecuzione tramite vb, mi rimane in esecuzione e devo stopparlo. Con end mi si chiudeva l'esecuzione.

Dove sbaglio? Come controllo con il debug?

matpez
03-08-2004, 23:47
Appunto visto.. il tuo programma ha errori, perchè un programma si chiude bene se con l'Unload Me si chiude del tutto (o il progetto si stoppa sa solo)

Sbagli che molto probabilmente nn chiudi bene qlc form, oppure vai a pescare delle informazioni su altri form e li lanci ma nn li chiudi!

Controlla quando vai a chiudere i vari form, se hai messo in tutti l'unload me, e controlla che tu nn vada a prendere cose in altro form!!

GogetaSSJ
03-08-2004, 23:55
Facendo questa codifica i 2 form vengono chiusi bene e l'esecuzione, tramite vb, viene terminata con successo


Private Sub lblesci_Click()
Unload frmopzioni
Unload Me
End Sub


Ma se chiudo con la X, continua a rimanere in memoria :(

GogetaSSJ
03-08-2004, 23:59
Ora si chiude... in pratica non avevo inserito un UNLOAD ME nel form delle opzioni.. quindi rimaneva in memoria proprio come dicevi tu
Ora ho modificato un pò il ciclo perchè se lo mettevo, in fase di inizializzazione mi dava errori xkè non riusciva a caricare cose che stanno nel form stesso.

Mi sa che devo riorganizzare la struttura del programma, ora ho capito. Grazie ancora per le dritte ;)

matpez
04-08-2004, 00:13
Prego anche a questo 3d :oink: :p :cool: :oink: :p